[我可能已经阅读了这里有关进口的所有文章,但我仍然无法弄清楚进口的情况,我花了数小时试图得到一个非常简单的示例,并且确实将我的头发拔出来。
我正在使用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导入非常令人困惑...
然后我又如何将我需要的东西导入到我的测试模块\ package \ folders 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
from my_message_validator.module_2 import bar, baz
.
一起使用,因为众所周知会导致multiple issues。始终将导入内容相对于项目的根目录编写。例如,您为from module_1.foo import Foo
做得很好。