gpt4 book ai didi

PYTHONPATH 与 sys.path(重新加载)

转载 作者:行者123 更新时间:2023-11-30 23:24:12 25 4
gpt4 key购买 nike

我想重新审视 PYTHONPATH vs. sys.path 中指定的问题。基本上它涉及开发一个包,例如:

Project
setup.py
package
__init__.py
lib.py
script.py

假设script.py确实from package.lib import foo它在调用时确实有效:

python -m package.script

来自 setup.py 所在的目录,但不在调用时(在 Windows 上,CPython 2.7):

.\package\script.py

ImportError: No module named package

在第一种情况下,打印 sys.path 时,第一个条目是 '',但在第二种情况下,第一个条目是 script.py 所在位置的绝对路径 正在坐着。当然,在这种情况下,它不知道有关 package 的任何信息,并且导入失败。在资源管理器中双击时也会出现这种情况。

original stackoverflow question建议通过setup.pydevelop安装包。然而,在当前setuptools 3.5 (我知道+对 distutils/setuptools 重命名感到困惑)这个选项甚至没有记录(我有 setuptools 3.4.x,但没有尝试)。

任何人都可以向我指出推荐的(“......唯一明显的方法......”)程序在 Windows 上(对于 CPython 2.7 但也考虑到 Python 3)双击文件并使其工作。相对进口?

最佳答案

现在更好的方法是使用带有 -e 选项的 pip install。

pip install -e .

它使用带有 setup.py 文件的目录。这 ”。”表示该目录。这与 setuptools 开发方法的工作方式相同。

我相信开发会在您的sight包文件夹中创建一个egg链接,该链接指向库的文件夹。 http://pythonhosted.org/setuptools/setuptools.html#develop-deploy-the-project-source-in-development-mode

python setup.py develop

我相信这就是你获得绝对路径的原因。开发链接和安装可能存在冲突。东西也可以被移动。

对于双击,只需检查 sys.argv 即可。如果 sys.argv[1] 没有值,请附加构建、安装或开发。

此外,我一直听说您想要导入模块,然后从模块中调用函数。从包导入库。 lib.foo() 这样你就知道该方法来自哪里。我相信导入对两种方式都会做同样的事情;这可能会清理您的导入。 Python 路径和打包可能很痛苦。

from package import lib
lib.foo()

关于PYTHONPATH 与 sys.path(重新加载),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23564225/

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