首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使Python从本地dist包或站点包而不是全局dist包中读取?ModuleNotFoundError:没有名为“azure.cosmos”的模块

如何使Python从本地dist包或站点包而不是全局dist包中读取?ModuleNotFoundError:没有名为“azure.cosmos”的模块
EN

Stack Overflow用户
提问于 2022-02-16 16:20:03
回答 2查看 1K关注 0票数 0

首先,this answer很好地解释了三个python包的位置,我首先对它们做一个简要的总结,在我的例子中,对于azure-cosmos python包,如下所示:

首先,Global dist--由sudo apt控制的包-get(在安装更新版本的pip3之前,它显示了Ver3.1.1):

代码语言:javascript
复制
$ sudo apt-get install python3-azure-cosmos
...
$ pip3 list -v | grep azure-cos
azure-cosmos 3.1.1 /usr/lib/python3/dist-packages

第二,本地dist-软件包,安装有sudo pip3

代码语言:javascript
复制
$ sudo pip3 install -U azure-cosmos
...
$ pip3 list -v | grep azure-cos
azure-cosmos 4.2.0 /usr/local/lib/python3.8/dist-packages pip

第三,本地站点-包,(用sudo删除,然后)安装pip3 (没有sudo)。

代码语言:javascript
复制
$ sudo pip3 install -U azure-cosmos
...
$ pip3 list -v | grep azure-cos
azure-cosmos 4.2.0 /home/me/.local/lib/python3.8/site-packages pip

但是,在所有三种情况下,我的Python只在(第一个)全局dist-包(包含一个旧的包版本)中查看:

代码语言:javascript
复制
$ python3 -c "from azure.cosmos import CosmosClient"
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: cannot import name 'CosmosClient' from 'azure.cosmos' (/usr/lib/python3/dist-packages/azure/cosmos/__init__.py)

我确实将$PATH和$PYTHONPATH设置为包含本地dist包和本地站点包位置,在全局dist包之前,Python实际上在sys.path 中显示了它们:

代码语言:javascript
复制
$ python3 -c "import sys; print([p for p in sys.path])"
['', '/usr/local/lib/python3.8/dist-packages', '/home/me/.local/lib/python3.8/site-packages', '/usr/lib/python38.zip', '/usr/lib/python3.8', '/usr/lib/python3.8/lib-dynload', '/usr/lib/python3/dist-packages']

那么,为什么Python会采用发行版附带的“天蓝色宇宙”的旧版本,而不是使用pip安装的更新版本呢?我在这里错过了什么?

(我确实尝试过更新python3 3-azure-cosmos软件包,但3.1.1似乎是通过apt-get获得的最高值,这不是问题的重点)

一个简单的解决方案是删除全局dist包版本,只需运行:

代码语言:javascript
复制
$ sudo apt-get remove python3-azure-cosmos

然后Python神奇地使用来自本地dist包或来自我家乡dir的站点包(分别通过sudo pip3或pip3安装的包)的版本,因为这个包不存在于全局dist包中。

但是..。我的问题是,我不能运行sudo --在本例中是。所以我不能删除全局包。停下来。

EN

回答 2

Stack Overflow用户

发布于 2022-02-17 14:24:14

尝试使用以下命令卸载/删除包,而不使用sudo rm -rf <Package_Directory>

Linux rm -rf是一个功能强大的命令强制删除目录。这意味着一个文件或目录将被删除。尽管它拥有read-only权限。

票数 0
EN

Stack Overflow用户

发布于 2022-02-18 14:58:36

解决这个问题和a similar issue I had one day later的一个可能方法(但不是解决方案)是只使用python虚拟环境,例如使用pipenv

代码语言:javascript
复制
$ pip3 install --upgrade pipenv
$ pipenv install azure-cosmos
$ pipenv run python -c "from azure.cosmos import CosmosClient"

而且我们有空输出,因此不再存在导入错误,这意味着它可以工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71145482

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档