我有这个项目结构:
root_package/
root_package/packA/
root_package/packA/__init__.py (empty)
root_package/packA/moduleA.py
root_package/packB/__init__.py (empty)
root_package/packB/moduleB.py
root_package/rootModule.py
在rootModule.py
我from packA.moduleA import ModuleAClass
在packA.moduleA.py
,我有from root_package.packB.moduleB import ModuleBItem
。
当通过PyCharm或带有python ./rootModule.py
的终端运行rootModule时,我收到此错误:
这是正确的导入方式吗?
Traceback (most recent call last):
File "/project_dir/rootPackage/rootModule.py", line 7, in <module>
from packA.moduleA import ModuleAClass
File "/project_dir/rootPackage/packA/moduleA.py", line 8, in <module>
from rootPackage.packB.moduleB import module_b_method
File "/project_dir/rootPackage/rootModule.py", line 7, in <module>
from packA.wavelet_compression import WaveletCompression
ImportError: cannot import name WaveletCompression
如何解决这个问题?
更新1
我已在 project_folder (不 root_package文件夹)中添加了测试文件。
所以当前的目录结构如下:
project_folder/
project_folder/root_package/
project_folder/root_package/packA/
project_folder/root_package/packA/__init__.py (empty)
project_folder/root_package/packA/moduleA.py
project_folder/root_package/packB/__init__.py (empty)
project_folder/root_package/packB/moduleB.py
project_folder/root_package/rootModule.py
project_folder/test_rootModule.py
我还没有制作project_folder
一个包(没有__init__.py
文件),因为test_rootModule
只是一个帮我运行实验的脚本。
因此,在root_package/packA/moduleA.py
中,在将from root_package.packB.moduleB import ModuleBitem
更改为from packB.moduleB import ModuleBitem
之后,如答案所示,它可以正常运行。
我无法从project_folder/test_rootModule.py
脚本运行我的实验。
我收到了这个错误:
追踪(最近的呼叫最后):
文件&#34; project_folder / test_rootModule.py&#34;,第8行,在中
从root_package.rootModule导入rootModuleClass
文件&#34; project_folder / root_package / rootModule.py&#34;,第7行,在中
来自packA.moduleA导入ModuleAClass
文件&#34; project_folder / root_package / packA / moduleA.py&#34;,第8行,在中
来自packB.moduleB import module_b_item
ImportError:没有名为packB.moduleB的模块
我似乎无法让第二个回溯看起来像代码段。
更新2
解决问题的原因是PyCharm中的Project: project_name > Project Structure
对话框,选择root_package
然后将其设置为Sources
文件夹。
现在,我可以通过IDE运行rootModule
和test_rootModule
。
虽然,但我无法从终端运行test_rootModule
。
test_rootModule
有这些导入:
from root_package.rootModule import RootModuleClass
from root_package.packB.moduleB import module_b_item
我在project_folder
目录,并运行python ./test_rootModule.py
并收到此错误:
Traceback (most recent call last):
File "./test_rootModule.py", line 8, in <module>
from root_package.rootModule import RootModuleClass
File "project_folder/root_package/rootModule.py", line 7, in <module>
from packA.moduleA import ModuleAClass
File "project_folder/root_package/packA/moduleA.py", line 8, in <module>
from packB.moduleB import module_b_item
ImportError: No module named packB.moduleB
答案 0 :(得分:1)
如果您在此路径中运行所有代码:
project_folder
然后,您应确保首先引用位于root_package
的所有模块。例如:
from root_package.modA import foo