Python“未命名模块”错误;'“包”不是一个包

2024-09-20 01:18:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试进行简单的导入并使用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'的模块;'emailage“不是程序包”错误

mysys.path的输出是:

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

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

我通常不太使用Python,因此非常感谢您的帮助


Tags: pip文件目录文件夹clientpackageslocal错误
3条回答

我遇到了类似的情况,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,这样它的名称就不会与子包名称冲突

问题出在我的文件命名中

我匆忙地将我的文件命名为emailage.py,然后尝试从emailage.client导入

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

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

对于遇到类似问题的其他人,请注意命名冲突。有时候,最简单的事情让你绊倒的时间最长

我研究了这个问题,尽管它与我遇到的错误不完全相同,但它帮助我解决了这个问题。我将解释我的情况,因为我认为一些用户可能会觉得这很方便。 因此,我得到了以下错误日志:

    Traceback (most recent call last):
  File "/home/kemal/Programming/Python/Preference_Articulation/LocalSearch/LS_apriori.py", line 1, in <module>
    from LocalSearch.LocalSearch import LocalSearch
ModuleNotFoundError: No module named 'LocalSearch.LocalSearch'; 'LocalSearch' is not a package

我的项目结构如下(使用PyCharm): View of project structure

需要注意的重要一点是,我将代码分为几个文件夹,因为这样可以使代码更具可读性。现在,在名为LocalSearch的文件夹中,我有4个文件,LocalSearch、LS_apriori和大约2个测试文件(不相关)。当尝试运行文件LS_apriori(使用文件LocalSearch中的方法和类)时,我遇到了上面提供的错误。代码并不重要,我处理导入的方式如下:

from LocalSearch.LocalSearch import LocalSearch

解决办法很简单。我将py文件LocalSearch重命名为Local\u Search(刚刚添加了下划线)。后来,错误消失了

所以我的问题是拥有一个文件夹(包)和其中的一个文件(模块)同名,其中有一个同名的类。Python不喜欢这样。 在模块中使用与包同名的模块是可以的,但是,我想这个类只是增加了额外的混乱

相关问题 更多 >