将模块从子文件夹导入到父文件夹
Import module from child folder to parent
所以我查看了这里提出的各种类似问题,但到目前为止对我没有任何帮助。
我有以下文件架构:
\folder
__init__.py
supClass.py
script1.py
\sub
__init__.py
script2.py
所以在 script2.py 我尝试导入 supClass。如果我很好地理解我阅读的有关相关主题的内容,我必须指定 \folder
是 PYTHONPATH 的一部分。
根据我阅读的示例,我得到了这段代码:
if __name__ == '__main__' and __package__ is None:
from os import sys, path
sys.path.append(path.dirname(path.dirname(path.abspath(__file__))))
from test_package import supClass
a = supClass()
a.print_sup()
但我收到以下错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 685, in runfile
execfile(filename, namespace)
File "C:\Python27\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 71, in execfile
exec(compile(scripttext, filename, 'exec'), glob, loc)
File "C:/Donnees/Programmes_Python/Developpement/Tests/test_package/sub/script.py", line 18, in <module>
from test_package import supClass
ImportError: No module named test_package
我通过
检查 \folder 现在是 PYTHONPATH 的一部分
import sys
print sys.path
在我的控制台中,没问题。但是,__package__
变量保持设置为 None。
我得到的错误似乎是说我的 \folder
不是模块。我不明白为什么,也许我混淆了 "package" 和 "module" 之间的东西。
无论如何,如果有人有想法,我们将不胜感激!
您是否尝试过只导入 supClass?
import supClass
或者试试这个:
sys.path.append("../")
import supClass
我试图重现您的层次结构,这成功了:
if __name__ == '__main__':
from os import sys, path
sys.path.append(path.dirname(path.dirname(path.abspath(__file__))))
from supClass import supClass
a = supClass()
a.print_sup()
\folder
的 parent 应该在 PYTHONPATH
上。然后你可以做
from folder import subClass
和
from folder.sub import script2
folder
的 parent 应该在 PYTHONPATH
上(而不是 folder
本身)的原因是因为 folder
是您的包,要 import folder
Python 需要在包含 folder
的目录中查找。
请注意,从 sub-folders 执行脚本是有问题的,但如果您编写 setup.py 文件则很容易。在此处查看我的答案 Whosebug。com/a/41201868/75103 了解更多信息。
所以我查看了这里提出的各种类似问题,但到目前为止对我没有任何帮助。
我有以下文件架构:
\folder
__init__.py
supClass.py
script1.py
\sub
__init__.py
script2.py
所以在 script2.py 我尝试导入 supClass。如果我很好地理解我阅读的有关相关主题的内容,我必须指定 \folder
是 PYTHONPATH 的一部分。
根据我阅读的示例,我得到了这段代码:
if __name__ == '__main__' and __package__ is None:
from os import sys, path
sys.path.append(path.dirname(path.dirname(path.abspath(__file__))))
from test_package import supClass
a = supClass()
a.print_sup()
但我收到以下错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 685, in runfile
execfile(filename, namespace)
File "C:\Python27\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 71, in execfile
exec(compile(scripttext, filename, 'exec'), glob, loc)
File "C:/Donnees/Programmes_Python/Developpement/Tests/test_package/sub/script.py", line 18, in <module>
from test_package import supClass
ImportError: No module named test_package
我通过
检查 \folder 现在是 PYTHONPATH 的一部分import sys
print sys.path
在我的控制台中,没问题。但是,__package__
变量保持设置为 None。
我得到的错误似乎是说我的 \folder
不是模块。我不明白为什么,也许我混淆了 "package" 和 "module" 之间的东西。
无论如何,如果有人有想法,我们将不胜感激!
您是否尝试过只导入 supClass?
import supClass
或者试试这个:
sys.path.append("../")
import supClass
我试图重现您的层次结构,这成功了:
if __name__ == '__main__':
from os import sys, path
sys.path.append(path.dirname(path.dirname(path.abspath(__file__))))
from supClass import supClass
a = supClass()
a.print_sup()
\folder
的 parent 应该在 PYTHONPATH
上。然后你可以做
from folder import subClass
和
from folder.sub import script2
folder
的 parent 应该在 PYTHONPATH
上(而不是 folder
本身)的原因是因为 folder
是您的包,要 import folder
Python 需要在包含 folder
的目录中查找。
请注意,从 sub-folders 执行脚本是有问题的,但如果您编写 setup.py 文件则很容易。在此处查看我的答案 Whosebug。com/a/41201868/75103 了解更多信息。