【发布时间】:2020-03-11 02:15:06
【问题描述】:
我可能已经阅读了这里关于进口的所有帖子,但我仍然无法弄清楚进口发生了什么,我花了几个小时试图让一个非常简单的例子工作并且真的把我的头发拉出来了。
我正在使用 python 3.7 和 pycharm,但我正在从命令行运行我的代码,我正在使用 pytest 进行单元测试。
我的项目结构是:
my_message_validator/
__init__.py
module_1/
__init.py__
foo.py
module_2/
__init.py__
bar.py
baz.py
module_3
context.py
test_all.py
module_1.init.py
from module_1 import foo
module_2.init.py
# For some reason pycharm doesnt complain when I use '.' but if I use module_2 it does
from . import bar, baz
如果我尝试从命令行运行我的代码或我的测试,无论我如何移动,我似乎都会得到ModuleNotFoundError: No module named,当我设法让测试工作时,我仍然无法自行运行我的代码从命令行。
如何将module_1 导入module_2,这些实际上是包吗?我来自 java,发现导入更容易理解,我发现 python 导入非常混乱......
然后我怎样才能将我需要的任何东西导入我的测试模块\包\文件夹context.py?
目前测试上下文如下:
import os
import sys
# Is this needed as it doesnt seem to do anything?
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
from module_1.foo import Foo
from module_2 import bar, baz
在test_all.py 我试图从上下文文件中导入,如下所示:
from .context import bar,baz
from .context import Foo
# Calling in test like
Foo.load_file(file)
bar.method_one()
baz.method_two()
我需要所有__init.py__ 文件吗?我应该在其中放入什么来使我的方法和类公开\公开?我希望整个包是可重用的,因此希望能够将其视为 java 中的 jar 文件。
任何帮助都将不胜感激,因为似乎每次我更改某些内容时都会在不同的地方出错,python 现在似乎比 java 复杂得多。
【问题讨论】:
-
您是否尝试过像这样导入: from my_message_validator.module_1.foo import Foo ?
标签: python python-3.x module package python-3.7