我已经阅读了这里关于导入的所有帖子,但我仍然无法弄清楚导入的情况。我花了几个小时尝试让一个非常简单的例子运行起来,现在我都快要抓狂了。
我正在使用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更加复杂。