如何分别为 python3 和 python2 设置不同的 PYTHONPATH 变量
how to set different PYTHONPATH variables for python3 and python2 respectively
我只想将特定的库路径添加到 python2。但是,将 export PYTHONPATH="/path/to/lib/"
添加到我的 .bashrc
后,执行 python3 会出现错误:您的 PYTHONPATH 指向 Python 2.x 的站点包目录,但您运行 Python 3.x!
我认为这是由于 python2 和 python3 共享共同的 PYTHONPATH
变量。
所以,我可以为python2和python3分别设置不同的PYTHONPATH
变量吗?如果没有,我如何才能将库路径专门添加到 python 的特定版本?
您可以在 lib/site-packages
(在 Windows 上)或 lib/pythonX.Y/site-packages
(在 Unix 和 Macintosh 上)下创建配置文件 mymodule.pth
,然后添加包含目录的一行添加到 python 路径。
来自 docs.python2 and docs.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.
就包管理而言,PYTHONPATH
有点像 hack。 "pretty" 解决方案是 打包 您的库并 安装 它。
这听起来可能比实际更棘手,所以让我向您展示它是如何工作的。
让我们假设您的 "package" 有一个名为 wow.py
的文件,并且您将其保存在 /home/user/mylib/wow.py
.
中
创建包含以下内容的文件 /home/user/mylib/setup.py
:
from setuptools import setup
setup(name="WowPackage",
packages=["."],
)
就是这样,现在您可以 "properly install" 将您的包放入您选择的 Python 发行版中,而无需担心 PYTHONPATH
。就"proper installation"而言,你至少有三个选择:
"Really proper"。将您的代码复制到您的 python 站点包目录:
$ python setup.py install
"Development"。只会将 python 站点包中的 link 添加到 /home/user/mylib
。这意味着对目录中代码的更改将生效。
$ python setup.py develop
"User"。如果您不想写入系统目录,您可以将软件包("properly" 或 "in development mode")安装到 /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
要删除已安装的软件包 "properly",请执行
$ pip uninstall WowPackage
如果你的包比单个文件更有趣(例如你有子目录等),只需在 setup
函数的 packages
参数中列出它们(你需要列出所有内容递归地,因此您将为更大的库使用辅助函数)。一旦掌握了它,请务必阅读 a more detailed manual。
最后,去把你的包贡献给 PyPI —— 这就像调用 python setup.py sdist register upload
一样简单(不过你需要一个 PyPI 用户名)。
我发现没有办法修改仅针对python2
或仅针对python3
的PYTHONPATH
。我不得不使用 .pth
file.
我要做的是:
- 确保在我的家中创建了目录:
$HOME/.local/lib/python${MAJOR_VERSION}.${MINOR_VERSION}/site-packages
- 在该目录中创建一个
.pth
文件
- 测试您的
.pth
文件是否正常工作
- 完成
有关 `.pth 的更多信息。文件语法及其工作方式请参阅:python2 docs and python3 docs.
(.pth
文件简而言之:当您的 python 解释器启动时,它将查找某些目录并查看 .pth
文件,打开这些文件,解析文件,然后将这些目录添加到您的 sys.path
(即与 PYTHONPATH
相同的行为)并使位于这些目录中的任何 python 模块可用于正常导入。)
如果您不想为 lib/site-packages
中的 moving/adding 文档而烦恼,请尝试在 python2.7 脚本中添加两行您想要 [=19] 的代码=](下)
import sys
sys.path = [p for p in sys.path if p.startswith(r'C:\Python27')]
这样,每次您 运行 您的代码时,PYTHONPATH 都会更新(忽略所有 python3.x 包)。
我只想将特定的库路径添加到 python2。但是,将 export PYTHONPATH="/path/to/lib/"
添加到我的 .bashrc
后,执行 python3 会出现错误:您的 PYTHONPATH 指向 Python 2.x 的站点包目录,但您运行 Python 3.x!
我认为这是由于 python2 和 python3 共享共同的 PYTHONPATH
变量。
所以,我可以为python2和python3分别设置不同的PYTHONPATH
变量吗?如果没有,我如何才能将库路径专门添加到 python 的特定版本?
您可以在 lib/site-packages
(在 Windows 上)或 lib/pythonX.Y/site-packages
(在 Unix 和 Macintosh 上)下创建配置文件 mymodule.pth
,然后添加包含目录的一行添加到 python 路径。
来自 docs.python2 and docs.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 tosys.path
. Non-existing items are never added tosys.path
, and no check is made that the item refers to a directory rather than a file. No item is added tosys.path
more than once. Blank lines and lines beginning with # are skipped. Lines starting withimport
(followed by space or tab) are executed.
PYTHONPATH
有点像 hack。 "pretty" 解决方案是 打包 您的库并 安装 它。
这听起来可能比实际更棘手,所以让我向您展示它是如何工作的。
让我们假设您的 "package" 有一个名为 wow.py
的文件,并且您将其保存在 /home/user/mylib/wow.py
.
创建包含以下内容的文件 /home/user/mylib/setup.py
:
from setuptools import setup
setup(name="WowPackage",
packages=["."],
)
就是这样,现在您可以 "properly install" 将您的包放入您选择的 Python 发行版中,而无需担心 PYTHONPATH
。就"proper installation"而言,你至少有三个选择:
"Really proper"。将您的代码复制到您的 python 站点包目录:
$ python setup.py install
"Development"。只会将 python 站点包中的 link 添加到
/home/user/mylib
。这意味着对目录中代码的更改将生效。$ python setup.py develop
"User"。如果您不想写入系统目录,您可以将软件包("properly" 或 "in development mode")安装到
/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
要删除已安装的软件包 "properly",请执行
$ pip uninstall WowPackage
如果你的包比单个文件更有趣(例如你有子目录等),只需在 setup
函数的 packages
参数中列出它们(你需要列出所有内容递归地,因此您将为更大的库使用辅助函数)。一旦掌握了它,请务必阅读 a more detailed manual。
最后,去把你的包贡献给 PyPI —— 这就像调用 python setup.py sdist register upload
一样简单(不过你需要一个 PyPI 用户名)。
我发现没有办法修改仅针对python2
或仅针对python3
的PYTHONPATH
。我不得不使用 .pth
file.
我要做的是:
- 确保在我的家中创建了目录:
$HOME/.local/lib/python${MAJOR_VERSION}.${MINOR_VERSION}/site-packages
- 在该目录中创建一个
.pth
文件 - 测试您的
.pth
文件是否正常工作 - 完成
有关 `.pth 的更多信息。文件语法及其工作方式请参阅:python2 docs and python3 docs.
(.pth
文件简而言之:当您的 python 解释器启动时,它将查找某些目录并查看 .pth
文件,打开这些文件,解析文件,然后将这些目录添加到您的 sys.path
(即与 PYTHONPATH
相同的行为)并使位于这些目录中的任何 python 模块可用于正常导入。)
如果您不想为 lib/site-packages
中的 moving/adding 文档而烦恼,请尝试在 python2.7 脚本中添加两行您想要 [=19] 的代码=](下)
import sys
sys.path = [p for p in sys.path if p.startswith(r'C:\Python27')]
这样,每次您 运行 您的代码时,PYTHONPATH 都会更新(忽略所有 python3.x 包)。