在python3中绝对导入,但它无法找到我的包

时间:2017-05-28 22:49:19

标签: python python-3.x python-import

所以我有这个目录结构:

/pkg
    /__init__.py
    /script1.py
    /dir1
         /__init__.py
         /file.json
         /dir2
              /__init__.py
              /script2.py

正如您所看到的,我有两个脚本文件,script1.py和script2.py,我尝试做的是从script2.py导入script1.py,所以我做了

import pkg.script1

但它告诉我

ModuleNotFoundError: No module named 'pkg'

端口并且确实

from ... import script1

但我收到此错误

ValueError: attempted relative import beyond top-level package

有人有任何想法吗?

1 个答案:

答案 0 :(得分:2)

如果没有看到你的命令行(重要的缺失信息),这只是猜测。您可以看到writeup I did on this here

可能正在运行python pkg/dir1/dir2/script2.py,它会将pkg/dir1/dir2放在python路径上(而不是.,如你所愿) - 这导致对于您看到的错误消息,因为您实际上处于该深度的包(并且pkg没有sys.path可导入任何-m根。你也会在python 2中看到同样的问题。

在调用模块脚本时,您几乎总是应该使用python -m pkg.dir1.dir2.script2方法。在您的情况下,它将是std::istream