gpt4 book ai didi

python - 全局为python 3.2和python 2.7设置不同的系统路径

转载 作者:行者123 更新时间:2023-12-01 04:12:24 24 4
gpt4 key购买 nike

我安装了一个编译源代码的模块。我使用 python3.4 做到了这一点,该模块位于/usr/local/lib/python3.4/site-packages/。如果我尝试运行它,python3.4 找不到它。如果我将目录添加到 PYTHONPATH,一切都会正常。

但是我有两个版本的 python(我运行的是 ubuntu)。 Python2.7和Python3.4。将目录添加到 PYTHONPATH 后,它变为:

/home/myuser/development/ros/devel/lib/python2.7/dist-packages:/opt/ros/indigo/lib/python2.7/dist-packages:/home/myuser/Qt/5.5/gcc_64/lib/cmake/lib/python2.7/dist-packages:/usr/local/lib/python3.4/site-packages/:/home/myuser/development/lcm

这样在同一个环境变量中就有与python2.7和python3.4相关的目录,我认为这是完全不安全和疯狂的。它非常容易出错。

我环顾四周,发现人们推荐使用 virtualenv。尽管如此,这并没有改变 PYTHONPATH。

处理这个问题的标准方法是什么?一些想法:

  • 我希望 python3.4 会自动在/usr/local/lib/python3.4/site-packages/中查找模块,但这并没有发生。也许我的 python3.4 安装有问题?
  • 即使我设法在不使用 PYTHONPATH 的情况下将该模块用于 python3.4,即使我使用 python3.4,我仍然在 PYTHONPATH 中拥有与 python2.7 相关的信息,所以我也应该删除它。

那么,如何设置 python 的路径来全局查找模块(不为每个程序使用 sys.path() ),但每个 python 版本都使用它自己的路径?

编辑:从评论中,我意识到我可以添加一个符号链接(symbolic link)到我的模块所在的目录。但我发现 python 2.7 或 3.4 的路径中都没有站点包,这是错误的..这​​是一个 ubuntu 问题吗?我在某处读到,site-packages 应该用于自编译模块,dist-packages 应该用于通过 apt-get 安装的模块。

编辑2:python#.#/site-packages 是为自定义包保留的。至少在ubuntu中,python默认不会在那里查找。所以我的行为是正确的,安装没有任何问题。

最佳答案

对于用户特定的软件包,安装它们的最佳位置是 per-user site directory 。在 unix 系统上,默认为 ~/.local,但可以通过设置 PYTHONUSERBASE 环境变量来更改。要查看系统上的当前设置,请运行以下命令:

[user@localhost tmp]$ PYTHONPATH='' python -m site
sys.path = [
'/tmp',
'/usr/lib/python35.zip',
'/usr/lib/python3.5',
'/usr/lib/python3.5/plat-linux',
'/usr/lib/python3.5/lib-dynload',
'/usr/lib/python3.5/site-packages',
]
USER_BASE: '/home/user/.local' (exists)
USER_SITE: '/home/user/.local/lib/python3.5/site-packages' (doesn't exist)
ENABLE_USER_SITE: True

请注意,最终出现在 .local/lib 下的目录是版本化的,从而避免了 PYTHONPATH 的问题。

因此,当您安装软件包时,您需要做的就是确保指定正确的 python 可执行文件,并将配置/设置脚本指向您的用户站点目录:

python3.5 setup.py install --prefix /home/user/.local

或者,如果您使用 pip,则可以使用 --user 选项实现相同的效果:

pip3 install --user some-package

关于python - 全局为python 3.2和python 2.7设置不同的系统路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34741333/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com