我在 Fedora KDE (x64) PC 上使用 Python。我以前使用的是 Fedora 25,并且使用 安装了 Python 3.5 sudo dnf install python3
,以及几个软件包,例如numpy
和scipy
使用 等命令sudo dnf install python3-numpy
。现在 Fedora 存储库中并非所有合适的软件包或版本都可用,因此我仅通过 安装了这些软件包或~/.local/lib/python3.5/site-packages/
版本pip3 install <packagename> --user
。
很快,我将 Fedora 升级到了 28 版,在此期间,我python3
又升级到了 3.6 版。所有其他python3-*
软件包也都进行了适当的升级。现在 pip3 无法识别任何用户安装的软件包,如pip3 list --user
,根本不返回任何输出。但~/.local/lib/python3.5/site-packages/
目录仍然存在,并且包含一堆软件包。
现在我不知道我该做什么......
- 如果我确切知道可以删除的内容
site-packages
,我也许可以删除 的内容?然后我可以重新调查现在真正需要通过 pip 安装哪些软件包。 - 我可以将其重命名
~/.local/lib/python3.5
为~/.local/lib/python3.6
? - 还有其他方法可以让 pip 导入旧用户安装的 python 包的内容吗?
我有点不知道该如何继续。
答案1
如果你仍然有 Python 3.5,这应该是一件非常容易的事情:
$ pip3.5 list --user --format=freeze | xargs pip3.6 install --user
将重新安装 Python 3.6 的所有用户站点包。当旧的 Python 安装消失时,事情会变得有点复杂(所以pip3.5
在你的情况下不会),但仍然没有什么是你无法管理的。首先,检查用户站点是否仍然存在,以便您可以使用它:
$ find ~/.local -type d -name "site-packages" | grep python3.5
/Users/hoefling/.local/lib/python3.5/site-packages
现在使用pkg_resources
列出该用户站点中可用的发行版:
$ find ~/.local -type d -name "site-packages" | grep python3.5 | xargs python3.6 -c "import pkg_resources, sys; print(' '.join((f'{pkg.project_name}=={pkg.version}' for pkg in pkg_resources.find_distributions(sys.argv[1]))))"
wheel==0.30.0
用户站点目录将通过管道传输到 Python 代码行,该代码行将使用pkg_resources.find_distributions
函数扫描目录(参见获取或创建分布pip
文档中的部分)与底层使用的相同,IIRC。我只是添加了一些格式,以便您可以pip3.6
在扩展单行代码的最后一次迭代中将输出传递给新的。完整的单行代码是:
$ find ~/.local -type d -name "site-packages" | grep python3.5 | xargs python3.6 -c "import pkg_resources, sys; print(' '.join((f'{pkg.project_name}=={pkg.version}' for pkg in pkg_resources.find_distributions(sys.argv[1]))))" | xargs pip3.6 install --user
pkg_resources
是软件包的一部分setuptools
,应该已经预先安装好了(至少在使用安装程序时是这样的https://www.python.org/downloads/)。如果没有,setuptools
请先安装:
$ dnf install python3-setuptools