即使使用__init__.py,相对路径也不起作用

sam*_*med 14 python import package python-import importerror

我知道堆栈溢出有很多类似的问题.但是,共同的答案对我来说似乎并不适用.

我有这样的文件结构

  proj/
       lib/
          __init__.py
          aa.py
          bb.py
          test/
               __init__.py
               aa_test.py
Run Code Online (Sandbox Code Playgroud)

我想如果我在test.py中包含代码

import lib.aa
Run Code Online (Sandbox Code Playgroud)

要么

from lib import aa
Run Code Online (Sandbox Code Playgroud)

我将能够引用lib/目录中的模块.但那没用.

所以我尝试添加到路径,并正确添加它:

os.environ["PATH"] += ":%s" % os.path.abspath(os.path.join("..",""))
print os.environ["PATH"]
Run Code Online (Sandbox Code Playgroud)

但即使是现在,当我尝试上面的导入语句时......我不断收到错误

ImportError: No module named aa
Run Code Online (Sandbox Code Playgroud)

要么

ImportError: Importing from non-package <Something...>
Run Code Online (Sandbox Code Playgroud)

有什么明显的东西我不见了吗?

有没有办法检查我__init__.py是否正确配置了我的文件,或者查看我的包层次结构?

Cas*_*par 19

您需要更新您的sys.path,这是python查找模块的位置,而不是您当前环境中系统的路径,这os.environ["PATH"]就是所指的.

例:

import os, sys
sys.path.insert(0, os.path.abspath(".."))
import aa
Run Code Online (Sandbox Code Playgroud)

完成此操作后,您可以aa像这样使用您的函数:aa.myfunc()

还有在一些更多的信息接受的答案蟒蛇:从目录导入模块