问题标签 [sys.path]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
13081 浏览

python - 如何刷新 sys.path?

我在以用户身份执行脚本期间安装了一些软件包。这些包是第一个用户包,所以 python 没有添加~/.local/lib/python2.7/site-packagessys.path脚本运行之前。我想导入那些已安装的软件包。但我不能,因为他们不在sys.path

我怎样才能刷新sys.path

我正在使用python 2.7。

0 投票
2 回答
925 浏览

python - 防止python加载pth文件

我的情况如下:

  • 我有一个本地安装的 python 版本。还有一个全局的,安装不好,我不想使用。(我没有管理员权限)。
  • 上面/usr/local/lib/site-packages有一个x.pth文件,其中包含错误安装 numpy 的路径
  • 我的 PYTHONPATH 没有任何这些路径。但是,一些管理员生成的脚本会添加/usr/local/usr/local/bin我的 PATH 中(这是一个假设,不是已知的事实)。
  • 这以某种方式导致添加到 my sys.path. 当我跑步时python -S,它不存在。
  • site.PREFIXES不包括/usr/local. 我不知道为什么要加载上述 pth 文件。
  • 我尝试将我自己的 pth 文件添加到本地安装的 site-packages 目录中,这样做import sys; sys.path.remove('pth/to/faulty/numpy')失败了,因为当加载该 pth 文件时,错误路径尚未在 sys.path 中。

有没有办法让我禁用所述 pth 文件的加载,或者在加载 python 之前从 sys.path 中删除路径?

我尝试设置 virtualenv,但它不适合我目前的情况。

0 投票
1 回答
3208 浏览

python - python:lib/site-packages/site.py 和 lib/site.py 之间的相互作用

由于一个特定的问题,我今天大部分时间都在弄清楚 site.py(s) 是如何工作的。有一点我不明白。

据我了解,加载 python 时,首先lib/python2.7/site-packages/site.py运行。它遍历PYTHONPATH、搜索lib/python2.7/site.py并导入它。这个文件有一个addsitedir方法,它不仅添加了一个路径sys.path,而且处理*.pth了它上面存在的文件。此时,main()lib/python2.7/site.py已运行,并且addsitedir在站点包和用户站点包上运行。

现在是奇怪的部分。现在我们回到lib/python2.7/site-packages/site.py,它遍历 pythonpath 中的每条路径,并addsitedir在其上运行。我觉得这很奇怪,原因有两个:

  1. addsitedir运行了lib/python2.7/site-packages两次。
  2. 这本身并没有那么糟糕(没有什么可以添加到 sys.path 两次),但似乎lib/python2.7/site.py有一种机制可以让雄心勃勃的用户sys.path通过实现一个usercustomize模块来进行操作(嘿,它甚至在docs中)。显然,当您实施这样的机制时,您希望确保用户最后进入,以便他可以控制添加到sys.path. 但这不是这里的情况(因为我很沮丧地发现)。最有可能的是,第二次调用lib/python2.7/site-packages将覆盖在usercustomize.

我知道这很糟糕,但我在 中添加了一个打印语句addsitedir,打印它接收到的路径,这样我就可以显示发生了什么。这些是处理的路径:

那我在这里问什么?:)

A. 我很感激关于为什么需要第二次调用 site-packages 的见解。

B.usercustomize确实是有限的,因为我认为这是由于这种实施?考虑到这一点,您将如何实现从 sys.path 中删除路径(理论上)?


请求的调试输出:

的输出python -vv这里

0 投票
4 回答
1101 浏览

python - 在 Google App Engine 中创建一个 lib 目录并将其添加到 sys.path

我正在用 Flask 用 Python 编写一个 Google App Engine 项目。这是我的 Hello, World! 目录结构!应用程序(为简洁起见省略了第三方库的内容):

这是main.py

并且myapp/__init__.py

由于 Flask 有如此多的依赖和子依赖,我认为通过将所有第三方代码放在一个子目录中(比如project_root/lib)来整理目录结构会很好。当然,然后sys.path不知道在哪里可以找到这些库。

我已经尝试过如何修改 Google App Engine (Python) 中的 sys.path 中的解决方案?,但这似乎不起作用。我也尝试过更改from flask import Flaskfrom lib/flask import Flask,但无济于事。有没有好的方法来做到这一点?

0 投票
0 回答
292 浏览

python - python pkg_resources 似乎不尊重 sys.path

我正在使用 Python 2.7 并尝试运行

在多个应用程序上。

我以为我可以通过在程序中操作 sys.path 来做到这一点,但 pkg_resources 似乎无法识别它;从特定的“appname”目录启动脚本时,我只能让应用程序被识别。

我可以用两个单独的程序以笨拙的方式完成这项工作,一个在文件层次结构中跳转,然后调用另一个来实际运行上面的命令。但这似乎很荒谬......

有人对此有见识吗?这是 pkg_resources 中的错误还是我缺少的东西?

0 投票
1 回答
773 浏览

python - 将路径添加到 PYTHONPATH 后 ImportError 仍然存在

运行一些 python 代码时出现以下错误

回溯(最后一次调用):文件“./dspl.py”,第 4 行,在导入库 ImportError:没有名为 base 的模块

disp.py 位于目录 PERSISTENCE_LENGTH 中,如下所示。disp.py 导入了 UTILS 目录中的一些 python 脚本(如下所示)。我将导入目录的路径(/home/vinay/oxDNA)添加到 PYTHONPATH 即,export PYTHONPATH=${PYTHONPATH}:/home/vinay/oxDNA/)。UTILS 目录中有一个正确的__init__.py 文件。

disp.py 在目录中:/home/vinay/oxDNA/EXAMPLES/PERSISTENCE_LENGTH

disp.py 正在导入目录中的其他模块:/home/vinay/oxDNA/UTILS

当我打印 sys.path 时,我可以看到 PYTHONPATH 没问题。如下图 ['', '/home/vinay', '/home/vinay/oxDNA/UTILS', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-linux2' , )

0 投票
1 回答
428 浏览

python-2.7 - python2.7正常调用或通过子进程调用时sys.path的差异

问题

为什么python2.7使用子进程调用时 via与通常调用python3的 sys.path 不同python2.7?具体来说, via 子进程 在 sys.pathpython2.7中没有目录。"/path/to/site-packages/"

语境

我想fabric用来部署我正在编写的 Django 应用程序。我的问题是我已经在 中编写了应用程序python3,但fabric还没有明确的python3 支持。fabric在与 完全兼容之前,我的解决方法python3fab使用subprocess.

出于某种原因,当我python2.7使用subprocessvia调用时python3,我无法访问site-packages.

python2.7检查

我已经通过 Enthought 安装python2.7并安装了。fabric==1.10.0

子流程检查

我使用子进程fab从内部调用没有问题。python2.7

我也没有问题python2.7从内部python3使用子进程调用。

DistributionNotFound: Fabric==1.10.0

但是,即使我的子进程python2.7可以“找到” fab 脚本,我也无法调用它。

站点包不在 sys.path 中

看来,python2.7当使用 subprocess via 调用时,与通常调用python3的 sys.path 不同。python2.7

正如预期的那样, sys.path 没有"site-packages"包含fabric模块的 Enthought 目录。

手动将站点包添加到 sys.path

确认这是可能的:当我手动添加正确的 "site-packages"目录时,我可以成功导入fabric.

其他选择?

必须有更好的方法来确保 python2.7 在通过 python3 的子进程调用时,具有与python2.7 正常调用相同的 sys.path。更熟悉子流程的人可以参与吗?

额外的想法

python2.7可以通过子进程生成另一个python2.7 并且该子进程在 sys.path 中具有正确的站点包目录,这真的很有趣。

我还比较了python3中的sys.path's,python3子处理的python3和python2.7子处理的python3,有点惊讶地发现这三个结果都是一样的sys.path

0 投票
3 回答
490 浏览

python - sys.path 不包括 PYTHONPATH(必须输入完整路径才能运行 django-admin startproject)

我正在运行 Windows 8.1、Python 3.4.2、Django 1.7。

.py文件与python.exe.

Windows系统路径为:

C:\lots_of_paths;C:\Python34;C:\Python34\Lib\site-packages\Django-1.7.1-py3.4.egg\django\bin

(共 531 个字符)

注册表中的 PYTHONPATH 变量是:

C:\Python34\Lib;C:\Python34\DLLs;C:\Python34\Lib\site-packages\Django-1.7.1-py3.4.egg\django\bin

(共 96 个字符)

我在设置此变量时粘贴了 Django 路径,以避免拼写错误。当我从 PYTHONPATH 复制并粘贴到记事本时,行中没有中断,因此似乎没有隐藏的回车符。

cmd.exe从目录C:\projects开始工作。

当我进入python -c "import sys;print(sys.path)"

结果是:

['', 'C:\Python34\lib\site-packages\django-1.7.1-py3.4.egg', 'C:\WINDOWS\S YSTEM32\python34.zip', 'C:\Python34\DLLs ', 'C:\Python34\lib', 'C:\Python34', 'C:\Python34\lib\site-packages']

\django\bin正在从路径中剪裁。

当我进入python django-admin.py startproject please_work

...它打印:python: can't open file 'django-admin.py': [Errno 2] No such file or directory

系统路径似乎找到了 Python,但 PYTHONPATH 无法正常工作,正如预期的那样。

当我输入时,django-admin startproject saving_time我得到了这个:

...所以它似乎django-admin.py在系统路径上找到并通过与关联运行python.exe,但参数未传递。当命令中包含 .py 后缀时,我得到相同的结果,如下面的一个答案中所建议的:django-admin.py startproject testproject

正确键入python C:\Python34\Lib\site-packages\Django-1.7.1-py3.4.egg\django\bin\django-admin.py startproject wasting_time功能,但它不应该是必要的,对吧?

0 投票
2 回答
2774 浏览

python - 我可以让我的 pip 用户安装包优先于系统吗?

我想找出一个“万无一失”的安装说明,将其放入 Python 项目的 README 中,调用它footools,以便我们组中的其他人可以在他们的笔记本电脑和服务器帐户上安装它的最新 SVN 版本。

问题是在调用 pip 安装的脚本时,让 Python 使用用户安装的库。例如,我们使用的服务器在/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/.

如果我这样做python2.7 setup.py install --user并运行主入口脚本,它会使用/Users/unhammer/Library/Python/2.7/lib/python/site-packages/. 这就是我想要的,但是 setup.py 单独不会安装依赖项。

如果我(恢复安装并)改为执行pip-2.7 install --user .并运行主入口脚本,它会使用旧文件/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/——这不是我想要的。

如果我(恢复安装并)改为pip-2.7 install --user -e .运行主入口脚本,它会使用其中的文件.——这不是我想要的,用户应该能够删除源目录(并且能够在不影响他们的情况下进行 svn安装)。


我可以使用(并推荐其他人使用)python2.7 setup.py install --user——但他们必须先做

为了安装依赖项(因为 pip 没有install --only-deps选项)。不过,这相当冗长。

setup.py 在做什么,pip 在这里没有做什么?

(编辑清楚我正在寻找更简单+更安全的安装说明。)

0 投票
1 回答
524 浏览

python-3.x - PYTHONPATH 已设置但未添加到 sys.path

我有一台运行 Ubutu 的 Chromebook。我刚刚创建了自己的包,我需要我的程序才能访问。昨晚我在 Mac OSX 上完成了所有工作,源代码都是一样的。包目录中有一个 init.py 文件(带下划线!)。我尝试在我的 .bashrc 和 .profile 中设置 PYTHONPATH。我将它回显到终端,它会显示我的包的正确目录。但是当我运行 Python 并查看 sys.path 时,目录并没有添加到 sys.path 中!昨晚我在 Mac OSX 上做了所有这些相同的步骤,并且看到新的目录在 sys.path 中显示得很好。