gpt4 book ai didi

python - 从不同目录执行时python导入错误

转载 作者:太空宇宙 更新时间:2023-11-03 18:15:19 24 4
gpt4 key购买 nike

我正在尝试在 thrift/test/py 文件夹中运行 TestServer.py。当我从测试文件夹执行它时,它工作正常。但是当我从 thrift 文件夹执行它时,它给了我以下导入错误。

Traceback (most recent call last):
File "test/py/TestServer.py", line 51, in <module>
from ThriftTest import ThriftTest
ImportError: No module named ThriftTest

以下是导致错误的行。

from ThriftTest import ThriftTest

这是什么原因呢?完整的 python 脚本可以在 https://github.com/apache/thrift/blob/master/test/py/TestServer.py 找到。

最佳答案

您的脚本假设其所有模块都位于 sys.path 中。当前工作目录会自动放置在 sys.path 中,但顶级脚本所在的目录则不会。

通常的解决方案是使用 distutils(或者更好的是,第三方模块 setuptools)构建一个发行版,并安装它(使用通常的 >python setup.py install)。然后脚本会转到 /usr/local/bin/TestServer.py 等位置,而模块则转到 /usr/local/等位置lib/python3.4/site-packages/ThriftTest,其中 /usr/local/lib/python3.4/site-packages/ 位于默认的 sys.path.

或者,您可以使用 zc.buildoutpyInstaller 等工具来创建包含自己的库的捆绑应用程序。或者,您可以使用 shell 脚本对您的目录执行 chdir 操作,然后运行您的脚本。或者构建可重定位的虚拟环境并将库手动安装到其站点包中。等等。但确实如此。

如果您确实需要能够将所有文件保留在开发目录中,但从任何地方运行它们,则方法是在启动时添加到 sys.path :

import sys
import os
scriptdir = os.path.dirname(os.path.abspath(sys.argv[0]))
sys.path.append(scriptdir)
import ThriftTest

关于python - 从不同目录执行时python导入错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25103913/

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