13

我正在开发一个使用 OpenCV (2.3.1) 以及其他库的 python 项目。到目前为止,我只是 apt-get 安装了所有东西,但现在我想与可能尚未安装所有东西的人分享我的代码。所以,virtualenv 似乎是完美的解决方案,但我明白了。

$ python src/importcv.py # does nothing but import cv, no problems
$ virtualenv .           # create virtualenv here
$ source bin/activate    # activates this virtualenv
(p)$ python src/importcv.py
Traceback (most recent call last):
  File "src/test.py", line 1, in <module>
    import cv
ImportError: No module named cv

我如何设置 virtualenv 有什么问题,还是我必须做一些其他步骤才能看到我的 opencv python 绑定?

4

5 回答 5

7

Virtualenv 创建了一个单独的 python 环境。您将需要重新安装所有依赖项。编辑这是真的 pip 似乎不能很好地与 opencv 一起使用。可以通过将 cv 共享对象复制到您的 virtualenv 来解决缺少的模块错误。下面链接的问题中的更多信息。

于 2012-11-09T16:42:56.700 回答
7

我在我的项目中使用 makefile 在 Python virtualenv 中安装 OpenCV。下面是样板示例。它要求您已经为您的系统 Python ( /usr/bin/python) 提供了 OpenCV 绑定,您可以使用类似yum install opencv-pythonapt-get install python-opencv.

首先查询系统 Python 的cv2模块并检索已安装库文件的位置。然后它复制cv2.so到 virtualenv 目录中。

VENV_LIB = venv/lib/python2.7
VENV_CV2 = $(VENV_LIB)/cv2.so

# Find cv2 library for the global Python installation.
GLOBAL_CV2 := $(shell /usr/bin/python -c 'import cv2, inspect; print(inspect.getfile(cv2))')

# Link global cv2 library file inside the virtual environment.
$(VENV_CV2): $(GLOBAL_CV2) venv
    cp $(GLOBAL_CV2) $@

venv: requirements.txt
    test -d venv || virtualenv venv
    . venv/bin/activate && pip install -r requirements.txt

test: $(VENV_CV2)
    . venv/bin/activate && python -c 'import cv2; print(cv2)'

clean:
    rm -rf venv

(您可以将上面的代码片段复制粘贴到 Makefile 中,但请确保通过运行sed -i s:' ':'\t':g Makefile或类似方法将缩进替换为制表符。)

现在您可以运行模板:

echo "numpy==1.9.1" > requirements.txt
make
make test

请注意,我们实际上不是复制符号链接,而是复制 .so 文件以避免此处指出的问题:https ://stackoverflow.com/a/19138136/1510289

于 2013-10-06T20:05:43.273 回答
5

只需将cv2*.so文件复制到虚拟环境的 site-packages 文件夹即可。例如:

cp /usr/lib/python3.6/dist-packages/cv2.cpython-36m-aarch64-linux-gnu.so ~/your_virt_env_folder/YOUR_VIRT_ENV_NAME/lib/python3.6/site-packages/
于 2019-07-09T11:02:21.413 回答
2

如果您想要一个更便携的解决方案(没有硬编码路径,没有awk输出字符串),您可以使用以下 shell 片段(在激活 之后venv):

echo "Importing opencv library from host into venv..."
# Find cv2 library for the global Python installation.
GLOBAL_CV2=$(/usr/bin/python3 -c 'import cv2; print(cv2.__file__)')
# Find site-packages directory in the venv
VENV_SITEPACKAGES_DIR=$(python3 -c 'import site; print(site.getsitepackages()[0])')
# Copy host-installed library file into venv
cp ${GLOBAL_CV2} ${VENV_SITEPACKAGES_DIR}
于 2020-09-15T02:23:05.163 回答
2

尝试安装opencv-python在你venv的内部,上面应该可以工作:

pip install opencv-python

于 2021-04-14T08:54:46.433 回答