Python3相对导入包失败

伦尼D.

我一直在阅读与该问题相关的大量问题,但到目前为止,这些问题都没有帮助我。我目前正在使用Pythonclick库将脚本作为命令执行。

我正在尝试执行的当前命令放置在Python软件包中,该软件包具有一个__main__.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

每当我尝试运行__main__.py位于项目文件夹中脚本时,就会出现以下错误。

ModuleNotFoundError: No module named '__main__.foo_two'; '__main__' is not a package

但是,如果我尝试使用上述-m选项从上方的文件夹中执行相同的脚本python3 myproject -m,则会显示以下内容。

ImportError: attempted relative import with no known parent package

__main__.py有2个进口这样的...的__init__.py是空的。

from .foo_two.foo_two import AClass, AnotherClass, OtherClass
from .foo_three.foo_three import AnotherClassMore

UPDATE:纠正在先前命令的语法错误,同时呼吁python -m myproject给了我一个ModuleNotFoundError,因为一个模块,是不是我的责任,这基本上是在项目中使用的库。

LaCroixed

希望这对外面的人很有用-我浏览了六堆stackoverflow帖子,试图弄清与上面上面发布的内容类似的相对进口量。我按照建议设置了所有内容,但仍在执行ModuleNotFoundError: No module named 'my_module_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=. python3 test/my_module/module_test.py                                                                                                  2.4.0
...........
----------------------------------------------------------------------
Ran 11 tests in 0.001s

OK

因此,如果有人尝试了一些建议,相信他们的代码结构正确,并且仍然发现自己处于与我自己类似的情况,那么,如果您不只是将当前目录导出添加到PYTHONPATH中,请尝试以下任一操作:

  1. 运行您的代码,并明确包含如下路径: $ PYTHONPATH=. python3 test/my_module/module_test.py
  2. 为避免调用PYTHONPATH=.,请创建一个setup.py内容如下的文件,然后运行python setup.py development以将软件包添加到路径中:
# setup.py
from setuptools import setup, find_packages

setup(
    name='sample',
    packages=find_packages()
)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章