问题标签 [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 投票
6 回答
39550 浏览

python - 向 Python sys.path 添加一个目录,以便在我每次使用 Python 时都包含它

目前,当尝试引用一些库代码时,我在 python 文件的顶部执行此操作:

然后,my-library只要会话处于活动状态,它就会成为 sys.path 的一部分。如果我开始一个新文件,我必须记住sys.path.append再次包含。

我觉得必须有更好的方法来做到这一点。如何让my-library我的 Windows 机器上的每个 python 脚本都可用,而不必sys.path.append每次都使用?

0 投票
3 回答
587 浏览

python - web.py 不导入 MySQLdb

我正在使用 web.py,由于某种原因,我收到以下错误:

这是我的 sys.path,万一那是罪魁祸首?不过,我看到了.egg,所以我不知道。想法?

以下是 2.6 site-packages 目录的内容:

如果我打开 python(2.4 或 2.6),我可以import MySQLdb毫无问题。

谢谢,汤姆

0 投票
1 回答
813 浏览

python - 导入 Python [Whoosh python -- 不理解导入错误]

我对很多事情都很陌生。

我尝试安装 Whoosh 以查看源代码并使用它。

我将路径添加到 sys.path 中包含 setup.py 和 README.txt 的文件夹,然后

并显示错误:

在 setup.py 文件中到达这一行时:

虽然 sys.path 需要文件夹的路径

它来自哪里,如何解决?

也许我只能在 sys.path 的最后一个位置打开路径中的文件?

谢谢并恭祝安康。

0 投票
2 回答
1268 浏览

python - dist-packages 和 sys.path

我在 myapplication 中有一些代码可以在 myapplications 的目录中查找一些文件。我正在使用 AptanaStudio,我看到我的代码运行正常,但是当我创建 debian 包并将其安装在另一台计算机上时,搜索不成功,因为 sys.path 看起来像一个不同的列表。

从 Aptana 执行sys.path包括可执行目录 (/mysvncopy/myapplication) 的路径,我相信我的代码会以这种方式找到文件。

应用程序的安装将这些文件保留在/usr/share/pyshared/myapplication中,我认为这个目录对于sys.path中的/usr/local/lib/python2.6/dist-packages是可以自动访问的,但是出了点问题,/ usr/local/lib/python2.6/dist-packages当然在sys.path中,但是应用程序在/usr/share/pyshared/myapplication中找不到任何东西。

我如何确保应用程序知道在/usr/share/pyshared/myapplication中查找以及在 windows 和 mac 中的等价物?

如果我在我的代码中包含:

搜索成功,但此代码非常依赖。

如有必要,我可以粘贴 setup.py。

谢谢

0 投票
2 回答
14288 浏览

python - Mac OS X 上的 python 模块搜索路径是如何确定的?

导入非内置模块时,解释器在sys.path. sys.path从这些位置初始化(http://docs.python.org/library/sys.html#sys.path):

  1. 包含输入脚本的目录(或当前目录)
  2. 蟒蛇路径
  3. 依赖于安装的默认值

虽然前两个来源是直截了当的,但任何人都可以解释第三个是如何工作的,以及影响它的可能性是什么?

尽管我对通用解决方案感兴趣,但我的具体问题是:

  • 我已经安装了Enthought 发行版 7.2 32-bit,然后是 Scipy-Superpack。现在,enthought python 尝试从 numpy 导入/Library/Python/2.7/,这是 superpack 安装它们的地方,而不是从 enthought 站点包中导入。
  • wxPython使用创建的应用程序py2app -Asys.path使用 启动应用程序时不同python start_app.py
0 投票
1 回答
2476 浏览

java - Java 与 Jython,优雅的解决路径问题的方法?

我有一段 Java 代码,使用 Jython 调用一些 Python 库,这个库依赖于外部 Jython 经典库,如re正则表达式等,所以我有这种代码:

顺便说一句,我不喜欢我需要更改和硬编码路径(path1)(path2)

您是否看到避免这种情况并添加一些“whereami”自动检测路径功能(至少对于(path2))的优雅方法?

看起来我需要 (path1) 和 (path2) => 以便 (A) 工作!

我还可以将我的问题重新表述为没有任何ImportError: No module named myModule或如何避免硬编码之类的优雅方式:

此致

0 投票
4 回答
308519 浏览

python - 在 Python 中将文件路径永久添加到 sys.path

我有一个名为 的文件example_file.py,我想从其他各种文件中使用它,所以我决定在另一个文件中添加example_file.pysys.path导入该文件以使用该文件。为此,我在 IPython 中运行了以下命令。

我可以看到我刚刚添加的路径,当我尝试从另一个目录路径导入此文件时,如下所示:

它工作得很好,但是一旦我从 IPython 出来,再次输入它并检查sys.path,我发现我添加的路径不存在,那么如何在 Python 中永久添加 sys.path 的路径?

0 投票
0 回答
913 浏览

python - py2app -- 导入外部模块

是否可以py2app设置为将用户的典型内容sys.path(运行 python 时,而不是 py2app .app)附加到 py2app 设置的路径的末尾?

我正在捆绑一个带有交互式 python 提示的应用程序——我希望其他用户能够使用他们构建的模块,但主 .app 中没有提供这些模块。如果他们尝试导入与 捆绑在一起的东西py2app希望使用该py2app版本。

--use-pythonpath--site-packages选项py2app似乎没有添加常规 python 所做的所有目录。

0 投票
1 回答
472 浏览

python - 限制导入到特定路径,不限制导入模块的路径

是否可以从特定目录导入模块,而不影响导入模块的导入路径?

如果我要临时替换sys.path为所需的目录,则导入的模块将无法导入该目录之外的任何内容。

我不想只sys.path添加目录,因为我不想导入回退到另一个来源。

0 投票
2 回答
2716 浏览

python - 如果它们具有相同的名称,为什么 python 会找到模块而不是包?

这是我的目录结构:

文件内容: root/tests/_ init _.py

根/测试/test_1.py

root/_ init _.py - 空的
root/classes.py

根/extra.py

根/根.py


我得到以下输出:

原来问题是python解释器用来搜索包或模块的顺序:


根据 python 文档http://docs.python.org/2/tutorial/modules.html#the-module-search-path:“当一个名为 spam 的模块被导入时,解释器首先搜索一个内置模块那个名字。如果没有找到,它会在变量 sys.path 给出的目录列表中搜索名为 spam.py 的文件。”</p>

这意味着 python 应该查看 sys.path 索引 0 条目,获取路径 '/home/dmugtasimov/tmp/name-res' 并找到名为 root 的包,然后在此包中搜索名为 extra 的模块。但它会在 /home/dmugtasimov/tmp/name-res/root/ 目录中搜索模块根目录,然后尝试在其中找到名为 extra 的内容。它会发生什么?它不与官方文件相矛盾吗?还是搜索包的规则与搜索模块的规则不同?如果是这样,这些规则是否包含在文档中的某个地方?

更新

我把它放在这里是为了更好的格式。
为了进一步调查,请执行以下操作:

  1. 删除 root.pyc
  2. 将 root.py 重命名为 root2.py
  3. 运行 python -vv -m unittest tests.test_1

似乎 python 仅在最初的 4 次尝试中忽略 sys.path。

更新 2

简化版:

文件init .py、b.py 和 xyz.py 为空
文件 a.py:

文件 t.py:

跑:

输出:

跑:

输出:

跑:

输出:

跑:

输出:

如您所见,两种情况下 sys.path 是相同的:

但行为不同。对于 a.py,python 首先搜索包 xyz,然后搜索其中的模块 b:

换句话说:

  1. 在目录 sys.path[0] -> FOUND 中搜索 PACKAGE xyz
  2. 在 PACKAGE xyz -> FOUND 中搜索模块 b
  3. 继续执行

对于 t.py,它在与 a.py 本身相同的目录中搜索模块 xyz,然后在模块 xyz 中找不到模块 b:

换句话说:

  1. 在与 a.py(或 sys.path[1] ?)相同的目录中搜索 MODULE xyz -> FOUND
  2. 在 MODULE xyz 中搜索 MODULE b -> 未找到
  3. 导入错误

因此,看起来“import xyz.b”是否会有所不同,具体取决于 a.py 最初是如何作为脚本加载或从另一个模块导入的。

更新 3

我提交了文档修复提案:http: //bugs.python.org/issue16891

更新 4

UPDATE 2 中描述的行为原因现在对我来说完全清楚了。

http://docs.python.org/2/tutorial/modules.html#intra-package-references

6.4.2. 包内引用

子模块通常需要相互引用。例如,环绕模块可能使用回声模块。事实上,这种引用非常普遍,以至于 import 语句首先在包含包中查找,然后再查找标准模块搜索路径。因此,环绕模块可以简单地使用 import echo 或 from echo import echofilter。如果在当前包(当前模块是其子模块的包)中找不到导入的模块,则导入语句会查找具有给定名称的顶级模块。

对于“python a.py”,“a”不被视为包中的模块,但对于“python t.py”,“a”被视为包“xyz”中的模块。因此,在第一种情况下,它根据 sys.path 搜索,但在第二种情况下,它在同一个包(即“xyz”)中搜索名为“xyz”的模块(换句话说,“xyz.xyz”)

您可以轻松查看是否像这样更改 a.py:

文件 a.py:

我的输出是:

感谢@JF Sebastian 指出正确的文档位置。

更新 5

似乎还有另一个问题。如果有兴趣,请在此处关注评论:http: //bugs.python.org/issue16891