# Call python packages from Julia

Hi, with the help of PyCall.jl, I can easily run a script of python, but if I want to replace the function defined in python with the function defined in julia, it reminds me cannot find the sub-function, can anybody help me to have a look, because in the future, I want to use quite complex sub-function written in julia, here is a simple example

``````
function black_box_function(x, y)   # with this function, doesn't work
return -x^2 - (y - 1)^2 + 1
end

using PyCall

py"""
from bayes_opt import BayesianOptimization

#def black_box_function(x, y):          # with this function, it works well
#return -x ** 2 - (y - 1) ** 2 + 1

pbounds = {'x': (2, 4), 'y': (-3, 3)}

optimizer = BayesianOptimization(
f=black_box_function,
pbounds=pbounds,
random_state=1,
)

optimizer.maximize(
init_points=2,
n_iter=3,
)

print(optimizer.max)

"""

``````

You need to “interpolate” the variable to send it to the Python side, something like `f=\$black_box_function`, assuming you defined `black_box_function` in Julia as a function.

Fwiw I believe there are Bayesian optimization packages for Julia as well that might be interesting to check out.

Yeah. I checked julia already, but it’s still under developing, that’s why I go for python

Hi, I find a way that works, hope that can give some helps for other people, here is my code

``````
function black_box_function(;x, y)   # here the ';' is because of the difference of parameters transfer, see this please[https://discourse.julialang.org/t/call-julia-function-from-python/75202](https://discourse.julialang.org/t/call-julia-function-from-python/75202)

return -x^2 - (y - 1)^2 + 1
end

using PyCall

py"""
pbounds = {'x': (2, 4), 'y': (-3, 3)}
"""
temp=pyimport("bayes_opt")

optimizer = temp.BayesianOptimization(
f=black_box_function,
pbounds=py"pbounds",
random_state=1,
)

optimizer.maximize(
init_points=2,
n_iter=3,
)

print(optimizer.max)

``````