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

2024-04-20 13:20:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我只想给python2添加一个特定的库路径。但是,在将export PYTHONPATH="/path/to/lib/"添加到my.bashrc之后,执行python3会得到一个错误:PYTHONPATH指向Python 2.x的site packages dir,但您正在运行python3.x!

我认为这是因为python2和python3共享公共的PYTHONPATH变量。

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


Tags: topath路径mylibpackages错误dir
3条回答

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

来自docs.python2docs.python3

A path configuration file is a file whose name has the form name.pth and exists in one of the four directories mentioned above; its contents are additional items (one per line) to be added to sys.path. Non-existing items are never added to sys.path, and no check is made that the item refers to a directory rather than a file. No item is added to sys.path more than once. Blank lines and lines beginning with # are skipped. Lines starting with import (followed by space or tab) are executed.

我发现没有办法修改仅用于python2或仅用于python3PYTHONPATH。我不得不使用^{} file

我要做的是:

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

更多关于`.pth的信息。文件语法及其工作方式请参见:python2 docspython3 docs

(简而言之,.pth文件:当您的python解释器启动时,它将在某些目录中查看.pth文件,打开这些文件,解析这些文件,并将这些目录添加到您的sys.path(即,与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参数中列出那些(您将需要递归地列出所有内容,因此您将为更大的库使用helper函数)。一旦你掌握了它,一定要阅读a more detailed manual以及。

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

相关问题 更多 >