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



我只想向python2添加一个特定的库路径。然而,在将export PYTHONPATH="/path/to/lib/"添加到我的.bashrc之后,执行python3会得到错误:您的PYTHONPATH指向Python 2.x的站点包目录,但您正在运行Python 3.x!

我认为这是由于python2和python3共享共同的PYTHONPATH变量。

那么,我可以为python2和python3分别设置不同的PYTHONPATH变量吗。如果没有,如何将库路径专门添加到特定版本的python?

就包管理而言,

PYTHONPATH有点像黑客。一个"漂亮"的解决方案是打包您的库并安装

这听起来可能比实际情况更棘手,所以让我向您展示它是如何工作的。

假设您的"包"有一个名为wow.py的文件,并将其保存在/home/user/mylib/wow.py中。

创建具有以下内容的文件/home/user/mylib/setup.py

from setuptools import setup
setup(name="WowPackage",
      packages=["."],
)

就是这样,现在您可以将您的包"正确地安装"到您选择的Python发行版中,而无需担心PYTHONPATH。就"正确安装"而言,您至少有三种选择:

  • "真的很合适"。将您的代码复制到您的python站点包目录:

    $ python setup.py install
    
  • "发展"。将只添加一个从python站点包到/home/user/mylib的链接。这意味着对目录中代码的更改将生效。

    $ python setup.py develop
    
  • "用户"。如果您不想写入系统目录,可以将包("正确"或"处于开发模式")安装到/home/user/.local目录,Python也可以在那里自己找到它们。为此,只需将--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

如果您的包比单个文件更有趣(例如,您有子目录等),只需在setup函数的packages参数中列出它们(您需要递归地列出所有内容,因此您将对较大的库使用辅助函数)。一旦你掌握了窍门,一定要阅读更详细的手册。

最后,去把你的包贡献给PyPI——这就像调用python setup.py sdist register upload一样简单(不过你需要一个PyPI用户名)。

您可以在lib/site-packages(在Windows上)或lib/pythonX.Y/site-packages(在Unix和Macintosh上)下创建一个配置文件mymodule.pth,然后添加一行包含要添加到python路径的目录。

来自docs.python2和docs.python3:

路径配置文件是名称形式为name.pth并且存在于上述四个目录之一的文件;其内容是要添加到CCD_ 20的附加项目(每行一个)。不存在的项永远不会添加到sys.path,也不会检查该项是否引用了目录而不是文件。sys.path中不会多次添加任何项目。将跳过空行和以#开头的行。执行以import开头的行(后面跟着空格或制表符)。

我发现没有办法修改PYTHONPATH,它只适用于python2python3。我不得不使用.pth文件

我要做的是:

  • 确保在我家中创建了目录:$HOME/.local/lib/python${MAJOR_VERSION}.${MINOR_VERSION}/site-packages
  • 在该目录中创建一个.pth文件
  • 测试您的.pth文件是否有效
  • 已完成

有关`.pth.file语法及其工作方式的更多信息,请参阅:python2-docs和python3-docs。

(简而言之,.pth文件:当您的python解释器启动时,它将查找某些目录并查看.pth文件,打开这些文件,解析文件,并将这些目录添加到sys.path(即与PYTHONPATH相同的行为),并使位于这些目录上的任何python模块可用于正常导入。)

如果您不想在lib/site-packages中移动/添加文档,请尝试在要运行的python2.7脚本中添加两行代码(如下)

import sys
sys.path = [p for p in sys.path if p.startswith(r'C:Python27')]

这样,每次运行代码时,PYTHONPATH都会更新(忽略所有python3.x包)。

最新更新