Aar*_*ras 3 python module pip python-3.x
我正在尝试进行简单的导入并使用emailage第三方库。
根据他们的文档,使用他们的库的方式如下:
pip install emailage-official
Run Code Online (Sandbox Code Playgroud)
然后,只需导入:
from emailage.client import EmailageClient
Run Code Online (Sandbox Code Playgroud)
通过pip可以正常安装-没有错误。我仔细检查了电子邮件包是否存在于正确的目录中,并且确实存在。
软件包位于:
C:\Users\aaron\AppData\Local\Programs\Python\Python37-32\Lib\site-packages\emailage
Run Code Online (Sandbox Code Playgroud)
此文件夹具有(似乎)带有__init__.py和的正确文件。但是,pylint和命令行解释器都向我抛出“没有名为“ emailage.client”的模块”。“电子邮件”不是包裹“错误。
我的输出sys.path是:
[...
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python37-32\\lib\\site-packages'
...
]
Run Code Online (Sandbox Code Playgroud)
因此,安装电子邮件的目录是路径的一部分...最后,我点安装了numpy只是为了测试它是否正常工作。Numpy与emailage安装在相同的site-packages文件夹中,并且在导入时可以正常工作,所以我被卡住了。
我通常很少使用Python,因此不胜感激。
ref*_*llo 11
我遇到了类似的问题,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
Run Code Online (Sandbox Code Playgroud)
脚本“myapi.py”通过以下语句从 myapi_creds.py 导入凭据:
from myapi.myapi_creds import my_user, my_pass
Run Code Online (Sandbox Code Playgroud)
测试模块“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
Run Code Online (Sandbox Code Playgroud)
解决方案是重命名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
Run Code Online (Sandbox Code Playgroud)
我的项目结构如下(使用 PyCharm): 项目结构视图
需要注意的重要一点是,我将代码分成了几个文件夹,因为这使其更具可读性。现在,在名为LocalSearch的文件夹中,我有 4 个文件:LocalSearch、LS_apriori和一些 2 个测试文件(不相关)。当尝试运行文件LS_apriori(它使用文件 LocalSearch 中的方法和类)时,我收到上面提供的错误。具体代码并不重要,我处理导入的方式如下:
from LocalSearch.LocalSearch import LocalSearch
Run Code Online (Sandbox Code Playgroud)
修复方法很简单。我将 py 文件LocalSearch重命名为Local_Search(只是添加了下划线)。之后,错误就消失了。
所以我的问题是拥有一个与其中的文件(模块)同名的文件夹(包),其中有一个同名的类。Python 不喜欢这样。然而,让模块与其中的包同名是可以的,我猜这个类只是增加了额外的混乱。
| 归档时间: |
|
| 查看次数: |
5049 次 |
| 最近记录: |