kokolegorille
Python module not found with erlport in release mode
Hello everyone,
I do have a strange error happening when using erlport and python.
** (ErlangError) Erlang error: {:python, :"builtins.ModuleNotFoundError", 'No module named \'cv2\'', [' File "/export/koko/koko/_build/prod/rel/koko/lib/face_recon2-0.1.0/priv/python_scripts/face_recon2.py", line 1, in <module>\n import cv2\n', ' File "/export/koko/koko/_build/prod/rel/koko/lib/erlport-0.10.1/priv/python3/erlport/erlang.py", line 225, in _incoming_call\n f = __import__(mod, {}, {}, [objects[0]])\n', ' File "/export/koko/koko/_build/prod/rel/koko/lib/erlport-0.10.1/priv/python3/erlport/erlang.py", line 233, in _call_with_error_handler\n function(*args)\n']}
** (EXIT) an exception was raised:
** (stop) exited in: GenServer.call(#PID<0.2634.0>, {:recon_faces, "/export/koko/uploads/post_processing/MTY0NzczMjU3NzY1Nw/screenshots"}, :infinity)
I do have cv2 installed with opencv-python, opencv-contrib-python, but it looks like it does not find it.
What is strange is… it’s working in dev, it’s working with MIX_ENV=prod mix phx.server, but not when starting the release.
Did I forgot to set some python environment variables?
I start the erlport process with…
@impl true
def init(_) do
path = Path.join([:code.priv_dir(:face_recon2), "python_scripts"])
with {:ok, pid} <- :python.start([{:python_path, to_charlist(path)}, {:python, 'python3'}]) do
Logger.info("[#{__MODULE__}] Started python worker #{inspect self()}")
{:ok, pid}
end
end
...
@impl true
def handle_call({:recon_faces, path}, _from, pid) do
result = case :python.call(pid, :face_recon2, :recon_faces, [path, training_set()]) do
{'ok', map_message} -> {:ok, sanitize(map_message)}
{'error', error} -> {:error, to_string(error)}
any -> {:error, "Unknown error #{inspect any}"}
end
{:reply, result, pid}
end
I know it’s very specific, but if someone can help me understand why the python3 cv2 library is not found, I’ll be very happy ![]()
Thanks for taking time
Marked As Solved
kartheek
Did you try setting PYTHONPATH env variable?
If it is working in one config and not working in other - you can check search path for modules:
import sys
sys.path
If you can diff sys.path in release and dev, may be you can find answer of what is missing?
Also Liked
kartheek
Python searches for modules in following places:
- tries to find in current directory from where script is run or interpreter is run
- paths added using PYTHONPATH
- python runtime
When using virtual environments - source <venv>/bin/activate it adds <venv>/lib/python<version>/site-packages folder to the search path.
Additional paths can be added using PYTHONPATH. Erlport also injects PYTHONPATH if it is set.
I feel you will find answer in diff from sys.path in dev and release environments.
It is unable to resolve cv2 module - mostly it has something to do with module search path.
kokolegorille
Thank You for your help, I will try and report.
Could You tell me more about this PYTHONPATH? For sure I did not use it ![]()
kokolegorille
Thank You,
I have found the path… unfortunately, I cannot test it yet, because someone is working on the site.
But it looks this should solve the problem ![]()
Popular in Questions
Other popular topics
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #channels
- #elixirconf
- #exunit
- #discussion
- #javascript
- #code-sync
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #phoenix_html
- #iex
- #blog-post
- #graphql
- #genstage
- #ai
- #websockets
- #supervisor
- #advent-of-code
- #elixirconf-us
- #distillery
- #processes
- #forms
- #api
- #metaprogramming
- #security
- #performance








