这是我的目录结构:
man/
Mans/
man1.py
MansTest/
SoftLib/
Soft/
SoftWork/
manModules.py
Unittests/
man1test.py
man1.py
包含以下 导入 语句, 我不想更改:
from Soft.SoftWork.manModules import *
man1test.py
包含以下 导入 语句:
from ...MansTest.SoftLib import Soft
from ...Mans import man1
我需要在 man1test.py
中进行第二次 _导入_,因为 man1test.py
需要访问 man1.py
中的函数。
我在第一次导入( Soft )背后的理由是促进 man1.py
中的上述 导入 语句。
然而,与我的预期相反, man1.py
中的 导入 语句会导致:
ModuleNotFoundError: No module named 'Soft'
当我跑步时
python3 -m man.MansTest.Unittests.man1test
从上面的目录 man/ 。
有没有什么办法可以解决这个错误而不改变 man1.py
中的 导入 语句 并且 不向 sys.path 添加任何东西?
编辑: python3 -m man.ManTest.Unittests.man1test
从问题的原始版本改为 python3 -m man.MansTest.Unittests.man1test
原文由 strangeloop 发布,翻译遵循 CC BY-SA 4.0 许可协议
首先,如果您希望能够从 man1test.py 访问 man1.py 和从 man1.py 访问 manModules.py , 您需要将文件正确设置为 包和模块。
您需要将其设置为以下内容:
_其次_,对于由
from ...Mans import man1
在 man1test.py 中引起的“ModuleNotFoundError: No module named 'Soft'
”错误,记录在案的解决方案是将 man1.py 添加到sys.path
是—在 MansTest 包之外。请参阅 Python 文档中 的模块搜索路径。但是如果不想直接修改sys.path
,也可以修改PYTHONPATH
:第三,对于
from ...MansTest.SoftLib import Soft
你说“ _是为了促进 man1.py 中的上述导入语句_”,这就是导入的工作方式。如果要在 man1.py 中导入 Soft.SoftLib ,则必须设置 man1.py 以找到 Soft.SoftLib 并直接将其导入那里。话虽如此,这就是我如何让它工作的。
人1.py:
man1test.py
人模块.py
终端输出:
作为一个建议,也许重新考虑那些 SoftLib 文件的目的。它是 man1.py 和 man1test.py 之间的某种“桥梁”吗?您现在的文件设置方式,我认为它不会像您期望的那样工作。此外,被测代码( man1.py )从测试文件夹( MansTest )下导入东西有点令人困惑。