利用conda虚拟环境的激活和停用脚本设置opencv

PYTHONPATH的顺序非常重要,不要轻易修改设置~/.bashrc里边的PYTHONPATH.

本文介绍一种方式,在虚拟环境激活的时候开启PYTHONPATH的设置,关闭时候恢复原来的设置,避免冲突。

首先进入您的虚拟环境的目录,找到 etc/conda/activate.d/ 和 etc/conda/deactivate.d/ 目录。

在 activate.d 目录中,创建一个脚本(例如 env_vars.sh):

#!/bin/sh
export OLD_PYTHONPATH=$PYTHONPATH
export PYTHONPATH=/path/to/your/env/python3.8/site-packages/:$PYTHONPATH

在 deactivate.d 目录中,创建一个脚本(例如 env_vars.sh):

#!/bin/sh
export PYTHONPATH=$OLD_PYTHONPATH
unset OLD_PYTHONPATH

这样,每当您激活 audio2 环境时,它会将正确的路径添加到 PYTHONPATH 的前面。当您停用环境时,它会还原原始的 PYTHONPATH。

请确保这两个脚本都是可执行的,您可以使用下边的命令来实现。

chmod +x script_name.sh

以下是发现问题的过程记录:

  1. PYTHONPATH放在第二位就不起效果吗?必须放在第一位才有效果?
(base) hello@hello-desktop:~$ echo $PYTHONPATH
/usr/local/lib/python3.10/site-packages/:/home/hello/mambaforge/envs/audio2/opencv/lib/python3.8/site-packages/:
(base) hello@hello-desktop:~$ python -c "import cv2; print(cv2.__version__)"
4.6.0
(base) hello@hello-desktop:~$ conda activate audio2
(audio2) hello@hello-desktop:~$ python -c "import cv2; print(cv2.__version__)"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/usr/local/lib/python3.10/site-packages/cv2/__init__.py", line 181, in <module>
    bootstrap()
  File "/usr/local/lib/python3.10/site-packages/cv2/__init__.py", line 112, in bootstrap
    load_first_config([
  File "/usr/local/lib/python3.10/site-packages/cv2/__init__.py", line 109, in load_first_config
    raise ImportError('OpenCV loader: missing configuration file: {}. Check OpenCV installation.'.format(fnames))
ImportError: OpenCV loader: missing configuration file: ['config-3.8.py', 'config-3.py']. Check OpenCV installation.
(audio2) hello@hello-desktop:~$ 
  1. 确实是只放在第一位才有效果,经过调整顺序之后,可以观察到虚拟环境audio2可以使用opencv,而base环境无法使用opencv.
(base) hello@hello-desktop:~$ echo $PYTHONPATH
/home/hello/mambaforge/envs/audio2/opencv/lib/python3.8/site-packages/:/usr/local/lib/python3.10/site-packages/:
(base) hello@hello-desktop:~$ python -c "import cv2; print(cv2.__version__)"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/home/hello/mambaforge/envs/audio2/opencv/lib/python3.8/site-packages/cv2/__init__.py", line 181, in <module>
    bootstrap()
  File "/home/hello/mambaforge/envs/audio2/opencv/lib/python3.8/site-packages/cv2/__init__.py", line 112, in bootstrap
    load_first_config([
  File "/home/hello/mambaforge/envs/audio2/opencv/lib/python3.8/site-packages/cv2/__init__.py", line 109, in load_first_config
    raise ImportError('OpenCV loader: missing configuration file: {}. Check OpenCV installation.'.format(fnames))
ImportError: OpenCV loader: missing configuration file: ['config-3.10.py', 'config-3.py']. Check OpenCV installation.
(base) hello@hello-desktop:~$ conda activate audio2
(audio2) hello@hello-desktop:~$ python -c "import cv2; print(cv2.__version__)"
4.6.0
(audio2) hello@hello-desktop:~$ 
  1. . 开启本文介绍的虚拟环境激活和停用设置之后,两个环境都可以使用各自的opencv. 最后的效果:
(base) hello@hello-desktop:~$ conda activate audio2
(audio2) hello@hello-desktop:~$ python -c "import cv2; print(cv2.__version__)"
4.6.0
(audio2) hello@hello-desktop:~$ conda deactivate 
(base) hello@hello-desktop:~$ python -c "import cv2; print(cv2.__version__)"
4.6.0

附录:
目前我的配置

  1. 激活/home/hello/mambaforge/envs/audio2/etc/conda/activate.d
#!/bin/sh
export OLD_PYTHONPATH=$PYTHONPATH
export PYTHONPATH=/home/hello/mambaforge/envs/audio2/opencv/lib/python3.8/site-packages/:$PYTHONPATH
export OLD_LD_LIBRARY_PATH=$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/home/hello/mambaforge/envs/audio2/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/home/hello/mambaforge/envs/audio2/opencv/lib/:$LD_LIBRARY_PATH
  1. 停用/home/hello/mambaforge/envs/audio2/etc/conda/deactivate.d
#!/bin/sh
export PYTHONPATH=$OLD_PYTHONPATH
unset OLD_PYTHONPATH
export LD_LIBRARY_PATH=$OLD_LD_LIBRARY_PATH
unset OLD_LD_LIBRARY_PATH
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值