如何为python3和python2分别设置不同的PYTHONPATH变量

时间:2015-12-03 12:35:10

标签: python pythonpath

我想只为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?

4 个答案:

答案 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路径的目录。

来自docs.python2docs.python3

  
    
      

路径配置文件是名称格式为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 docspython3 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软件包)。