Python 'No module named' 错误; “包”不是包

新手上路,请多包涵

我正在尝试进行简单的导入并使用 emailage 第三方库。

根据他们的文档,使用他们的库的方式如下:

 pip install emailage-official

然后,只需导入:

 from emailage.client import EmailageClient

使用 pip 安装工作正常 - 没有错误。我仔细检查了 emailage 包是否存在于正确的目录中,确实如此。

包存在于:

 C:\Users\aaron\AppData\Local\Programs\Python\Python37-32\Lib\site-packages\emailage

这个文件夹有(看似)正确的文件,带有 __init__.py 和一切。但是,pylint 和命令行解释器都向我抛出“没有名为‘emailage.client’的模块”; “电子邮件”不是包裹“错误。

我的 sys.path 的输出是:

 [...
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python37-32\\lib\\site-packages'
...
]

所以安装 emailage 的目录是路径的一部分……最后我 pip-installed numpy 只是为了测试它是否正常工作。 Numpy 安装到与 emailage 相同的 site-packages 文件夹中,并且在导入时工作正常,所以我被卡住了。

我通常不经常使用 Python,因此我们将不胜感激。

原文由 Aaron Taveras 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 582
2 个回答

问题出在 我的文件命名中

我匆忙命名我的文件 emailage.py 然后尝试从 emailage.client 导入。

我假设 Python 在检查已安装的第三方库之前查看了我的当前目录并匹配了我正在处理的文件的名称。

重命名我的文件后,一切似乎都正常。

对于遇到类似问题的其他人—— 当心命名冲突。有时候,最简单的事情会让你犯错的时间最长。

原文由 Aaron Taveras 发布,翻译遵循 CC BY-SA 4.0 许可协议

我遇到了类似的事情,OP 关于命名空间冲突的回答最终让我明白了。

我为其中的子包(目录)和模块(文件)使用了相同的名称。

例如我有这个:

 /opt/mylib/myapi
/opt/mylib/myapi/__init__.py
/opt/mylib/myapi/myapi_creds.py        # gitignored file for user/pass
/opt/mylib/myapi/myapi.py              # base module, load creds and connect
/opt/mylib/myapi/myapi_dostuff.py      # call myapi.py and do work

脚本“myapi.py”通过以下语句从 myapi_creds.py 导入凭据:

 from myapi.myapi_creds import my_user, my_pass

测试模块“myapi.py”导致此错误:

 $ ./myapi.py
Traceback (most recent call last):
  File "./myapi.py", line 12, in <module>
    from myapi.myapi_creds import my_user, my_pass
  File "/opt/mylib/myapi/myapi.py", line 12, in <module>
    from myapi.myapi_creds import my_user, my_pass
ModuleNotFoundError: No module named 'myapi.myapi_creds'; 'myapi' is not a package

解决方案是将 myapi.py 重命名为 myapi_base.py 所以它的名称不会与子包名称冲突。

原文由 refriedjello 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题