善用PYTHONPATH环境变量,以及opencv安装

-- TOC --

sys.path是python代码在import各种模块的搜索路径list。当import某个模块的时候,python解释器按照sys.path中列出的路径展开搜索工作。

PYTHONPATH

因此,修改sys.path,就可以影响后面的import。

我们有两种方式修改sys.path:

  1. 在python代码中直接像修改一般list对象一样,修改sys.path;
  2. 通过PYTHONPATH环境变量。

PYTHONPATH环境变量,就像PATH环境变量一样,只是python解释器在启动的时候,会将PYTHONPATH中的路径(可能是多个,Linux下用:分割,Windows下用;分割),写入sys.path中(很靠前哦,顺序仅次于当前路径)。

个人编写的一些模块,需要在别的项目中import时,我以前的习惯做法,是copy这个模块到安装python的site-package目录里面去。这种方式有个问题,如果模块更新,就需要重新copy,比较麻烦。

而使用PYTHONPATH这个环境变量却非常简单,现在我只需要将我个人的模块路径写入PYTHONPATH即可,各部分update后,什么都不改变。

Windows的环境变量设置,是个图形界面,设置好了重启不丢失。

Linux的环境变量设置,使用export命令,建议将这个命令加入.bashrc文件,每次你login的时候,自动export。

$ export PYTHONPATH='/home/abc:/home/xyz/repo'
$ python3 -q
>>> from pprint import pprint
>>> import sys
>>> pprint(sys.path)
['',
 '/home/abc',
 '/home/xyz/repo',
 '/usr/lib64/python310.zip',
 '/usr/lib64/python3.10',
 '/usr/lib64/python3.10/lib-dynload',
 '/usr/lib64/python3.10/site-packages',
 '/usr/lib/python3.10/site-packages']

python自带一个叫site的模块,可以用来查看默认sys.path的值,用法如下:

$ python3 -m site
sys.path = [
    '/home/xili',
    '/home/abc',
    '/home/xyz/repo',
    '/usr/lib64/python310.zip',
    '/usr/lib64/python3.10',
    '/usr/lib64/python3.10/lib-dynload',
    '/usr/lib64/python3.10/site-packages',
    '/usr/lib/python3.10/site-packages',
]
USER_BASE: '/home/xili/.local' (exists)
USER_SITE: '/home/xili/.local/lib/python3.10/site-packages' (doesn't exist)
ENABLE_USER_SITE: True

解决import cv2失败

我是在解决import cv2失败的过程中,才发现PYTHONPATH的可爱之处的。

跟很多同学一样,我在Windows系统中安装opencv这个库的时候,也是遇到了import cv2失败,提示各种找不到...

我是这样做的:

  1. 在github上下载opencv的exe,解压;
  2. 将解压后的cv2整个目录copy到site-package;
  3. import cv2失败。

在折腾的过程中,我发现解压出来的文件中,有一个setup_vars_opencv4.cmd文件,打开看了一眼,是个cmd窗口的脚本。于是,我尝试运行了一下它。

运行后,进入python解释器,import cv2就成功了!大喜....

仔细研究了一下脚本,发现它就干了一件事,设置PYTHONPATH这个环境变量。于是,我毫不犹豫地手动在系统中重新设置PYTHONPATH,然后,如预期一样,每次import cv2都成功了。

截个图,以示庆祝,也展示一下在Windows下设置PYTHONPATH,同时给还在import cv2失败问题上挣扎的同学一个参考:

pythonpath_win.png

安装opencv

在Windows系统下:

  1. 前一段介绍的方法;
  2. pip install opencv-contrib-python;(或者opencv-python)
  3. 编译安装;(可使用加速,见如下介绍)

在Linux系统下:

  1. pip install opencv-contrib-python;(或者opencv-python)
  2. 编译安装;

opencv contrib modules:

https://github.com/opencv/opencv_contrib

This repository is intended for the development of so-called "extra" modules, contributed functionality. New modules quite often do not have stable API, and they are not well-tested. Thus, they shouldn't be released as a part of the official OpenCV distribution, since the library maintains binary compatibility, and tries to provide decent performance and stability.

So, all the new modules should be developed separately, and published in the opencv_contrib repository at first. Later, when the module matures and gains popularity, it is moved to the central OpenCV repository, and the development team provides production-quality support for this module.

Windows下编译安装opencv(加速)

下载源码,解压,下载cmake,安装。

为了给opencv加速,需要安装Intel的oneAPI工具包,里面有tbb和ipp。安装VS,它现在自带openmp模块。

在cmake的界面上,选择opencv的sources目录,选择自己建的mybuild目录,然后config,确定编译器了cpu参数。config过程可能很慢,因为要下载一些文件,fail and retry。

config执行完后,开始修改参数(在cmake界面的search中使用关键词查找):

然后,Generate...(还是下载慢...)

然后,在自己建的mybuild目录下,有个OpenCV.sln工程文件,用VS打开它(在cmake中直接open也可以),选择Release或者Debug,选择CMakeTargets下的ALL_BUILD,右键,生成。最后,选择CMakeTargets下的INSTALL,右键,生成。

opencv_world455d.dll,455后面d表示debug。没有这个d,就是release。

Linux下编译安装opencv

本文链接:https://cs.pynote.net/sf/python/202209163/

-- EOF --

-- MORE --