python - 对 python 导入感到困惑

标签 python linux package importerror

我评论了the Python 2.7.5 documentation .我的真实项目有问题,但在这里创建了一个小型测试项目以简明地重现该问题。想象一个具有以下布局的包存储在 ~/Development/Test

结构如下:

Test/
    __init__.py
    foo.py
    sub/
        __init__.py
        test_foo.py

代码(__init__.py 文件是空的):

foo.py

def bar():
    print("hello world")

test_foo.py

import Test.foo
# also tried from Test import foo

def main():
    foo.bar()

if __name__ == "__main__":
    main()

当尝试从终端运行 test_foo.py 时(即 python test_foo.py),我得到:

Traceback (most recent call last):
  File "test_foo.py", line 1, in <module>
    import Test.foo
ImportError: No module named Test.foo

我正在尝试从子模块中的测试文件导入包 (foo.py) 中的主文件(在我的真实项目中,子模块是单元测试代码)。奇怪地使用 Sublime text 2编辑器和插件 python test runner ,我可以很好地运行我的个人测试,但我无法构建测试文件。它给了我上述错误。

最佳答案

模块名称区分大小写。使用:

import Test.foo as foo

(as foo 是为了让您可以在 main 中调用 foo.bar。)


您还必须在 PYTHONPATH 中列出 ~/Development

如果使用 Unix 并且您的登录 shell 是 bash,将 ~/Development 添加到 PYTHONPATH 编辑 ~/.profile 以包含

export PYTHONPATH=$PYTHONPATH:$HOME/Development

这是 instructions for Windows .


进一步的调试建议:

地点

import sys
print(sys.path)
import Test
print(Test)
import Test.foo

test_foo.py 的顶部。请发布输出。

关于python - 对 python 导入感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18301580/

相关文章:

python - PyQT QtCore.信号

python - 如何使用 sklearn 在 Python 中将 N*M 矩阵居中

linux - 每天使用 cron 运行脚本并创建压缩日志文件

linux - 编译的程序找不到库

r - 更改包内 geom_text 的字体系列

go - 拉取单个go标准包的副本进行修改

python - 出现运行时错误 : unsupported value when trying to insert binary data into a blob field in a sqlite3 table using python

python - 如何在异常时重新启动循环

linux - 在无限循环中逐行读取文件直到中断

gdb - 由于错误 "no source file named model/page.go",无法使用 Golang 在 GDB 中设置断点