我想只为python2添加一个特定的库路径。然而,在[root@node002 ~]# env|grep SSH_CLI
SSH_CLIENT=172.18.0.1 53734 22
添加export PYTHONPATH="/path/to/lib/"
之后,执行python3会收到错误:您的PYTHONPATH指向Python 2.x的site-packages目录,但您运行的是Python 3.x!
我认为这是因为python2和python3共享公共.bashrc
变量。
那么,我可以分别为python2和python3设置不同的PYTHONPATH
变量。如果没有,我如何将库路径专门添加到特定版本的python?
答案 0 :(得分:22)
PYTHONPATH
有点像黑客。 A"漂亮"解决方案是打包你的库和安装它。
这听起来可能比现在更棘手,所以让我告诉你它是如何工作的。
让我们假设你的"包"有一个名为wow.py
的文件,您将其保存在/home/user/mylib/wow.py
。
使用以下内容创建文件/home/user/mylib/setup.py
:
from setuptools import setup
setup(name="WowPackage",
packages=["."],
)
那就是它,现在你可以"正确安装"将您的包打包到您选择的Python发行版中,而无需担心PYTHONPATH
。至于"正确安装"关注,你至少有三个选择:
"非常合适"。将您的代码复制到python site-packages目录:
$ python setup.py install
"开发&#34 ;.只会添加python site-packages到/home/user/mylib
的链接。这意味着对目录中代码的更改将起作用。
$ python setup.py develop
"用户&#34 ;.如果您不想写入系统目录,可以在/home/user/.local
目录中安装软件包("正确"或者#34;在开发模式")。也可以自己找到它们。为此,只需将--user
添加到命令中即可。
$ python setup.py install --user
$ python setup.py develop --user
要删除在开发模式下安装的软件包,请执行
$ python setup.py develop -u
或
$ python setup.py develop -u --user
要删除已安装的软件包"正确",请执行
$ pip uninstall WowPackage
如果您的包比单个文件更有趣(例如,您有子目录等),只需列出packages
函数的setup
参数中的那些(您需要递归列出所有内容,因此,您将为更大的库使用辅助函数)。一旦掌握了它,请务必阅读a more detailed manual。
最后,去把你的包贡献给PyPI - 就像调用python setup.py sdist register upload
一样简单(但你需要一个PyPI用户名)。
答案 1 :(得分:20)
您可以在mymodule.pth
(在Windows上)或lib/site-packages
(在Unix和Macintosh上)下创建配置文件lib/pythonX.Y/site-packages
,然后添加一行包含要添加到python路径的目录。
路径配置文件是名称格式为
name.pth
的文件,存在于上述四个目录之一中;其内容是要添加到sys.path
的其他项目(每行一项)。不存在的项目永远不会添加到sys.path
,也不会检查项目是指目录而不是文件。没有任何项目多次添加到sys.path
。以#开头的空白行和行将被跳过。以import
开头的行(后跟空格或制表符)将被执行。
答案 2 :(得分:0)
我发现无法修改仅PYTHONPATH
或仅python2
的{{1}}。我必须使用.pth
file。
我要做的是:
python3
$HOME/.local/lib/python${MAJOR_VERSION}.${MINOR_VERSION}/site-packages
文件.pth
文件是否正常有关`.pth的更多信息。文件语法及其工作方式,请参见:python2 docs和python3 docs。
简而言之({.pth
文件:当您的python解释器启动时,它将在某些目录中查找.pth
文件,打开这些文件,解析这些文件,并将这些目录添加到您的{ {1}}(即与.pth
相同的行为),并使位于这些目录中的所有python模块均可正常导入。)
答案 3 :(得分:0)
如果您不希望在lib/site-packages
中移动/添加文档,请尝试在要运行的python2.7脚本中添加两行代码(如下)。
import sys
sys.path = [p for p in sys.path if p.startswith(r'C:\Python27')]
这样,每次运行代码时,PYTHONPATH都会更新(忽略所有python3.x软件包)。