Python3相对导入在包中失败
我读了很多关于这件事的问题,但到目前为止,并没有一个对我有帮助。我目前正在使用PythonPython3相对导入在包中失败,python,python-3.x,Python,Python 3.x,我读了很多关于这件事的问题,但到目前为止,并没有一个对我有帮助。我目前正在使用Pythonclick库以命令的形式执行脚本 我试图执行的当前命令被放置在一个Python包中,该包有一个\uuuu main\uuuuu.py文件,就像父目录一样。目前的项目结构如下 /myproject /foo_one __init__.py foo_one.py /foo_two __init__.py foo_two.py /foo
click
库以命令的形式执行脚本
我试图执行的当前命令被放置在一个Python包中,该包有一个\uuuu main\uuuuu.py
文件,就像父目录一样。目前的项目结构如下
/myproject
/foo_one
__init__.py
foo_one.py
/foo_two
__init__.py
foo_two.py
/foo_three
__init__.py
foo_three.py
/foo_four
__init__.py
foo_four.py
/foo_five
__init__.py
foo_five.py
/foo_six
__init__.py
foo_six.py
__init__.py
__main__.py
foo_seven.py
每当我试图运行项目文件夹中的\uuuuu main\uuuuuu.py
脚本时,就会出现以下错误
ModuleNotFoundError:没有名为“\uuuu main\uuuu.foo\uu two”的模块__main__u;不是一个包
但是,如果我尝试使用-m
选项从上面的文件夹中执行相同的脚本,如python3myproject-m
,将显示以下内容
ImportError:尝试在没有已知父包的情况下进行相对导入
\uuuuu main\uuuuu.py
有两个类似的导入。。。\uuuu init\uuuu.py
为空
from .foo_two.foo_two import AClass, AnotherClass, OtherClass
from .foo_three.foo_three import AnotherClassMore
UPDATE:在调用
python-m myproject
时,更正先前命令中的语法错误会给我一个modulenofounderror
,因为模块不是我的职责,它基本上是项目中使用的一个库。您需要在每个子文件夹中使用python代码设置\uuu init\uuu.py
,以告诉解释器将文件夹作为一个模块处理
/myproject
/foo_one
__init__.py # add this
foo_one.py
/foo_two
__init__.py # add this
foo_two.py
/foo_three
__init__.py # add this
foo_three.py
/foo_four
__init__.py # add this
foo_four.py
/foo_five
__init__.py # add this
foo_five.py
/foo_six
__init__.py # add this
foo_six.py
__init__.py
__main__.py
foo_seven.py
\uuuu init\uuuuu.py
告诉解释器将子文件夹视为python模块/包,您应该能够导入
\uuuu init\uuuuuu.py
文件可以为空,但需要存在于子文件夹中才能导入该模块/包
python -m myproject
这应该在顶级包中执行
\uuuuuu main\uuuuu
希望这对其他人有价值——我浏览了半打stackoverflow帖子,试图找出与上面帖子类似的相对进口。我按照建议设置了所有内容,但仍然点击了modulenofounderror:没有名为'my\u module\u name'的模块。
因为我只是在本地开发和玩,所以我没有创建/运行setup.py
文件。我显然也没有设置我的PYTHONPATH
我意识到,当我像测试与模块位于同一目录时那样运行代码时,我找不到我的模块:
$ python3 test/my_module/module_test.py 2.4.0
Traceback (most recent call last):
File "test/my_module/module_test.py", line 6, in <module>
from my_module.module import *
ModuleNotFoundError: No module named 'my_module'
因此,如果有人尝试了一些建议,认为他们的代码结构正确,并且仍然发现自己处于与我类似的情况,那么如果您不只是将导出当前目录添加到PYTHONPATH,请尝试以下任一方法:
$PYTHONPATH=。python3测试/my_模块/module_测试.py
PYTHONPATH=。
,请创建一个包含以下内容的setup.py
文件,然后运行python setup.py development
将包添加到路径:完全忘了添加这些内容,因为它们会自动包含在内。。。我已经有了,问题已经更新了。对不起,谢谢你的更正。如果我像这样执行代码,则会针对一个模块抛出一个异常,但该模块是项目中的库。检查可能重复。
$ PYTHONPATH=. python3 test/my_module/module_test.py 2.4.0
...........
----------------------------------------------------------------------
Ran 11 tests in 0.001s
OK
# setup.py
from setuptools import setup, find_packages
setup(
name='sample',
packages=find_packages()
)