gpt4 book ai didi

python - 如何在 Python 中添加 sys.path 的路径?

转载 作者:IT老高 更新时间:2023-10-28 20:33:40 27 4
gpt4 key购买 nike

问题描述:

使用pip,我升级到最新版本requests (版本 2.7.0,pip show requests 给出位置 /usr/local/lib/python2.7/dist-packages)。但是,当我 import requests 并在交互式命令行中打印 requests.__version__ 时,我看到的是 2.2.1 版。事实证明,Python 使用的是预装的 Ubuntu 版本的 requests(requests.__file__/usr/lib/python2.7/dist-packages/requests/__init__.pyc -- 不是 /user/local/lib/...)。

根据我的调查,这个事实是由于 Ubuntu 对 Python 搜索路径的更改(我运行 Ubuntu 14.04)通过添加 Ubuntu 的 Python 包的路径(对于我的机器,这发生在 usr/local/lib/python2.7/dist-packages/easy-install.pth)。就我而言,这会导致使用与 Ubuntu 一起预打包的 apt-get 版本的请求,而不是我想要使用的 pip 版本。

我在寻找什么:

我想在 Ubuntu 的 Python 安装目录的路径之前将 pip 的安装目录路径全局添加到 Python 的搜索路径 (sys.path)。由于我的许多 Python 脚本中都使用了请求(以及许多其他包),因此我不想手动更改机器上每个文件的搜索路径。

不满意的解决方案 1:使用 virtualenv

使用 virtualenv会对我的机器造成不必要的更改,因为我必须重新安装全局存在的每个包。我只想从 Ubuntu 的包升级到 pip 的包。

不满意的解决方案 2:更改 easy-install.pth

由于每次使用 easy-install 时都会覆盖 easy-install.pth,因此我对 easy-install.pth 的更改将是如果安装了新软件包,则删除。这个问题让我的机器上的包很难维护。

不满意(但目前为止最好的一个)解决方案 3:添加单独的 .pth 文件

在与 easy-install.pth 相同的目录中,我添加了一个 zzz.pth 内容:

import sys; sys.__plen = len(sys.path)
/usr/lib/python2.7/dist-packages/test_dir
import sys; new=sys.path[sys.__plen:]; del sys.path[sys.__plen:]; p=getattr(sys,'__egginsert',0); sys.path[p:p]=new; sys.__egginsert = p+len(new)

site.py 在 Python 启动时读取此文件。由于它的文件名按字母数字顺序出现在 easy-install.pth 之后,它随后被 site.py 使用。总而言之,文件的第一行和最后一行添加了 sys.path 的路径(这些行取自 easy-install.pth)。

我不喜欢这个解决方案如何依赖文件名的字母数字顺序来正确放置新路径。

PYTHONPATH 位于 Ubuntu 的路径之后

Another answer在 Stack Overflow 上对我不起作用。我的 PYTHONPATH 路径位于 easy-install.pth 中的路径之后,它使用我在“不满意的解决方案 3”中提到的相同代码来添加其路径。

提前谢谢你!

最佳答案

不建议这样做,因为它会硬编码路径并难以在其他地方运行脚本,但您可以这样做

>>> import sys
>>> sys.path.insert(0,'/home/anand/')
>>> print(sys.path)
['/home/anand/', '', '/usr/local/lib/python2.7/dist-packages/_pdbpp_path_hack', '/usr/local/lib/python2.7/dist-packages/goose-0.0.1-py2.7.egg', '/usr/local/lib/python2.7/dist-packages/jieba-0.33-py2.7.egg', '/usr/local/lib/python2.7/dist-packages/cssselect-0.9.1-py2.7.egg', '/usr/local/lib/python2.7/dist-packages/nanoservice-0.1.5-py2.7.egg', '/usr/local/lib/python2.7/dist-packages/nanomsg-1.0a2-py2.7-linux-x86_64.egg', '/usr/local/lib/python2.7/dist-packages/msgpack_python-0.4.2-py2.7-linux-x86_64.egg', '/usr/local/lib/python2.7/dist-packages/DecisionTree-2.2.5-py2.7.egg', '/usr/local/lib/python2.7/dist-packages/nudepy-0.2-py2.7.egg', '/usr/local/lib/python2.7/dist-packages/wsgilog-0.3-py2.7.egg', '/usr/local/lib/python2.7/dist-packages/distribute-0.7.3-py2.7.egg', '/usr/local/lib/python2.7/dist-packages/PIL-1.1.7-py2.7-linux-x86_64.egg', '/usr/local/lib/python2.7/dist-packages/MySQL_python-1.2.5-py2.7-linux-x86_64.egg', '/usr/local/lib/python2.7/dist-packages/munkres-1.0.7-py2.7.egg', '/usr/local/lib/python2.7/dist-packages/parsedatetime-1.4-py2.7.egg', '/usr/local/lib/python2.7/dist-packages/argparse-1.3.0-py2.7.egg', '/usr/local/lib/python2.7/dist-packages/tusker-0.1-py2.7.egg', '/usr/local/lib/python2.7/dist-packages/SQLAlchemy-1.0.3-py2.7-linux-x86_64.egg', '/usr/local/lib/python2.7/dist-packages/numpy-1.9.2-py2.7-linux-x86_64.egg', '/usr/local/lib/python2.7/dist-packages/turkic-0.2.5-py2.7.egg', '/usr/local/lib/python2.7/dist-packages/scikits.bootstrap-0.3.2-py2.7.egg', '/usr/local/lib/python2.7/dist-packages/pyvision-0.1-py2.7-linux-x86_64.egg', '/home/anand/playspace/languages/python_pkgs/ets', '/usr/local/lib/python2.7/dist-packages/Scrapy-1.1.0dev1-py2.7.egg', '/usr/lib/python2.7/dist-packages', '/home/anand/playspace', '/home/anand/workspace/pyvision/src', '/home/anand/playspace/yapf', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/local/lib/python2.7/dist-packages/Orange/orng', '/usr/local/lib/python2.7/dist-packages/PIL', '/usr/lib/python2.7/dist-packages/PILcompat', '/usr/lib/python2.7/dist-packages/gst-0.10', '/usr/lib/python2.7/dist-packages/gtk-2.0', '/usr/lib/pymodules/python2.7', '/usr/lib/python2.7/dist-packages/wx-3.0-gtk2']
>>>

在此之后,您的导入将先查看前置路径,然后再查看其他任何位置。

关于python - 如何在 Python 中添加 sys.path 的路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31414041/

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