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

Dou*_* Su 40 python pythonpath

我想只为python2添加一个特定的库路径.然而,在添加export PYTHONPATH="/path/to/lib/"到my .bashrc之后,执行python3会收到错误:您的PYTHONPATH指向Python 2.x的site-packages目录但您运行的是Python 3.x!

我认为这是由于python2和python3共享公共PYTHONPATH变量.

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

Ken*_*nly 22

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

来自docs.python2docs.python3:

路径配置文件是一个文件,其名称具有该形式name.pth,并存在于上述四个目录之一中; 其内容是要添加的附加项目(每行一个)sys.path.永远不会添加不存在的项目sys.path,也不会检查项目是指目录而不是文件.没有项目被添加到sys.path多次.以#开头的空白行和行将被跳过.以import(后跟空格或制表符)开头的行将被执行.


KT.*_*KT. 22

PYTHONPATH就包管理而言,这有点像黑客.一个"漂亮"的解决方案是打包你的库并安装它.

这可能听起来比现在更棘手,所以让我告诉你它是如何工作的.

让我们假设你的"包"有一个名为的文件wow.py,你保留它/home/user/mylib/wow.py.

/home/user/mylib/setup.py使用以下内容创建文件:

from setuptools import setup

setup(name="WowPackage",
      packages=["."],
)
Run Code Online (Sandbox Code Playgroud)

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

  • "真的很合适".将您的代码复制到python site-packages目录:

    $ python setup.py install
    
    Run Code Online (Sandbox Code Playgroud)
  • "发展".只会添加python site-packages的链接/home/user/mylib.这意味着对目录中代码的更改将起作用.

    $ python setup.py develop
    
    Run Code Online (Sandbox Code Playgroud)
  • "用户".如果您不想写入系统目录,可以将程序包("正确"或"处于开发模式")安装到/home/user/.local目录,Python也可以在目录中找到它们.为此,只需添加--user到命令.

    $ python setup.py install --user
    $ python setup.py develop --user
    
    Run Code Online (Sandbox Code Playgroud)

要删除在开发模式下安装的软件包,请执行

$ python setup.py develop -u
Run Code Online (Sandbox Code Playgroud)

要么

$ python setup.py develop -u --user
Run Code Online (Sandbox Code Playgroud)

要删除"正确"安装的软件包,请执行

 $ pip uninstall WowPackage
Run Code Online (Sandbox Code Playgroud)

如果你的包比单个文件更有趣(例如你有子目录等),只需packagessetup函数的参数中列出那些(你需要递归地列出所有内容,因此你将为更大的库使用辅助函数).一旦掌握了它,请务必阅读更详细的手册.

最后,去把你的包贡献给PyPI - 它就像调用一样简单python setup.py sdist register upload(尽管你需要一个PyPI用户名).