在一台服务器上,我可以导入一个库,而在第二台服务器上,我不能。我需要导入的库是通过NFS共享的,并且两个服务器都可以访问。
我发现两台服务器之间的Python路径不同,但是Python二进制文件是相同的,是从标准ubuntu 16.04存储库安装的,并且$PYTHONPATH
在两台服务器上均未设置。
服务器1:
$ echo $PYTHONPATH
$ python
>>> import sys; sys.path
['', '/usr/lib/python2.7', '...', '/usr/local/lib/python2.7/dist-packages', '/home/user/app/src/python', '/usr/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages/wx-3.0-gtk2']
服务器2:
$ echo $PYTHONPATH
$ python
>>> import sys; sys.path
['', '/usr/lib/python2.7', '...', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages']
我如何理解该库的定义位置,以便将相同的行为复制到服务器2?
奇怪的事实是,库位于路径/usr/local/lib
和之间/usr/lib
。
编辑:python二进制文件是相同的(相同的版本2.7.12,并且校验和匹配),并且是从ubuntu存储库中的标准位置安装的/usr/bin/python
。
我玩过库site
,所有变量都相同(site.ENABLE_USER_SITE
返回True)。
我知道我可以操纵脚本中的路径,或者PYTHONPATH
在/etc/profile.d/中为所有服务器指定路径,但是我想知道区别在哪里。
我发现Python中存在路径配置文件。在Python 3上的site模块文档中:
它从头和尾部分开始最多构建四个目录。首先,它使用sys.prefix和sys.exec_prefix;空头被跳过。对于尾部,它使用空字符串,然后使用lib / site-packages(在Windows上)或lib / pythonX.Y / site-packages(在Unix和Macintosh上)。对于每个不同的首尾组合,它会查看它是否指向现有目录,如果是,则将其添加到sys.path中,并检查新添加的配置文件路径。
...
路径配置文件是名称形式为name.pth的文件,并且存在于上述四个目录之一中。它的内容是要添加到sys.path中的其他项(每行一个)。不存在的项目永远不会添加到sys.path,并且不会检查该项目是指向目录而不是文件。没有一项可以添加到sys.path中。空行和以#开头的行将被跳过。执行从导入开始的行(后跟空格或制表符)。
就我而言/usr/local/lib/python2.7/dist-packages/easy-install.pth
,第二个服务器上缺少一个文件。
python -S
在调试时,禁用自动导入这些文件可能很有用。
不幸的是,我还没有找到一种方法来检索从中读取路径配置文件的目录列表。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句