python查找文件位置,python模块库到哪里找
背景全是废话,别看!
服务器多用户使用,都没有标准化操作的经验,多用户多版本管理问题很多。希望自己的用户环境不要被别人的操作打扰,在不断的学习中也找到了一些比较好的方法,比如用Virtualenv(venv)。但是从一开始,我用的是默认安装的Python。本着坑还是要填的原则,我暂时先解决问题,再考虑用新的方法。
背景,看这里!
Python导入模块的搜索路径由sys.path指定,本质上是一个列表,列表索引决定了搜索优先级。调用python时,根据PYTHONPATH和Python的安装位置进行初始化。大部分博客都提到sys.path列表的第一优先级是脚本当前执行的目录,通常显示为“”;第二优先级是PYTHONPATH;第三个重点是安装位置。这个说法并不完美,也是这个博客所强调的。详见文末总结。问题
系统:ubuntu16.04
软件:python2.7(系统预装)
问题描述:
跑步的时候。py或者使用python交互环境导入cv2,我总是在导入cv2出错的时候导入一些博客推荐的opencv-python(前提是我已经设置了PYTHONPATH),而不是自己源代码编译的opencv。最初的怀疑是搜索路径的优先级,但是PYTHONPATH确实高于默认安装路径,令人费解!
求解步骤
将自己opencv的安装路径添加到最高优先级(列表的第一个元素),验证是否是搜索路径优先级造成的。
Sys.path.insert (0, $ { opencv _ install }/lib/python 2.7/dist-packages/)导入cv2。_ _ file _ _结论:正确找到自己编译的OpenCV确实是一个优先级问题。新的问题出现了。PYTHONPATH的优先级高于默认安装路径。为什么还是发现opencv-python是默认安装路径?
打印出sys.path进行检查,发现当前path 和PYTHONPATH中插入了一些路径,实际上包含了/usr/local/lib/python 2.7/dist-packages 。老晚白菜找到了,opencv-python默认安装路径在PYTHONPATH前面,所以每次都找到opencv-python的模块。
要解决这个问题,我们得搞清楚这部分路径是怎么添加到sys.path的?
百度…有很多帖子,但是好像都没有谈到这个问题!冰…还有很多相关的问题。看了几个都没找到原因!直到下午才在Stack Overflow上发现同样的问题。要问这部分路径是从哪里来的,更不要说服务了!Python的sys.path从哪里初始化?-Stack Overflow,其中排名第一的答案和排名第二的答案的评论都提到了site.py然后,回过头来仔细研究Python官方文档28.1 . sys——系统特定参数和函数——Python 2 . 7 . 15文档,果然有新发现:
看黄色的底部。有一个站点模块会在启动时自动加载一些路径到sys.path。这个模块通过读取指定目录下的XXX.pth文件来添加相应的路径!关于site模块的细节不想写了,有兴趣的自己看官方文档,因为写文档太耗时了,写了也不一定有人会看,看了也不一定会关注…
解决问题
添加到PYTHONPATH之前的“/usr/local/lib/python 2.7/dist-packages/easy-install . PTH”位于文件/usr/local/lib/python 2.7/dist-packages中。注释掉这句话,解决问题!
总结问题:
python安装的文件中有一行/usr/local/lib/Python 2.7/dist-packages/easy-install . PTH ,是在PYTHONPATH之前添加的,导致import cv2时只能找到pip安装的opencv-python模块,自行编译安装在其他地方的cv2找不到!体验:
根据背景知识,Python根据sys.path列表搜索模块,site模块会自动加载sys.path中XXX.pth中的路径,可能位于PYTHONPATH之前。这个问题也启发了我们。除了PYTHONPATH之外,我们还可以通过在指定位置添加XXX.pth,利用上面site模块的函数来指定我们自己编译的模块的路径。当然,建议在我们自己的用户目录里~/。local/lib/python 2.7/site-packages/la!
比如一些自编译的模块,比如cv2,在python2和3中不能同时使用,而PYTHONPATH是共享的。为了互不干扰,可以用XXX.pth来表示路径!案例:Python——如何分别为Python 3和Python 2设置不同的Python路径变量——堆栈溢出
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。