首先,this answer很好地解释了三个python包的位置,我首先对它们做一个简要的总结,在我的例子中,对于azure-cosmos python包,如下所示:
首先,Global dist--由sudo apt控制的包-get(在安装更新版本的pip3之前,它显示了Ver3.1.1):
$ 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
$ 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)。
$ 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-包(包含一个旧的包版本)中查看:
$ 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 中显示了它们:
$ 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包版本,只需运行:
$ sudo apt-get remove python3-azure-cosmos然后Python神奇地使用来自本地dist包或来自我家乡dir的站点包(分别通过sudo pip3或pip3安装的包)的版本,因为这个包不存在于全局dist包中。
但是..。我的问题是,我不能运行sudo --在本例中是。所以我不能删除全局包。停下来。
发布于 2022-02-17 14:24:14
尝试使用以下命令卸载/删除包,而不使用sudo rm -rf <Package_Directory>
Linux rm -rf是一个功能强大的命令强制删除目录。这意味着一个文件或目录将被删除。尽管它拥有read-only权限。
发布于 2022-02-18 14:58:36
解决这个问题和a similar issue I had one day later的一个可能方法(但不是解决方案)是只使用python虚拟环境,例如使用pipenv。
$ pip3 install --upgrade pipenv
$ pipenv install azure-cosmos
$ pipenv run python -c "from azure.cosmos import CosmosClient"而且我们有空输出,因此不再存在导入错误,这意味着它可以工作。
https://stackoverflow.com/questions/71145482
复制相似问题