【发布时间】:2020-12-02 00:56:04
【问题描述】:
当我将fedora从31升级到33时,我发现基础python包已经从3.7.9升级到3.9,并且虚拟环境文件夹中的python引用现在指向了新版本的python。
激活我的 python 3.7 虚拟环境没有问题
[bou@bous-fed33 avguide]$ source ~/py37/bin/activate
(py37) [bou@bous-fed33 avguide]$ which python
~/py37/bin/python
然而python版本不再是3.7.9而是3.9,它是fedora 33自带的
(py37) [bou@bous-fed33 avguide]$ python -V
Python 3.9.0
现在当我尝试运行 jupyter notebook 时出现错误ModuleNotFoundError
(py37) [bou@bous-fed33 avguide]$ jupyter notebook --port 7777
[W 09:14:02.710 NotebookApp] Error loading server extension jupyterlab
ModuleNotFoundError: No module named 'jupyterlab'
其他包如 pandas、numpy 等也会出现错误,这些包以前都很好。
(py37) [bou@bous-fed33 avguide]$ python
Python 3.9.0 (default, Oct 6 2020, 00:00:00)
[GCC 10.2.1 20200826 (Red Hat 10.2.1-3)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pandas as ps
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'pandas'
我曾尝试从现有的 requirements.txt 文件中重新安装所有软件包并手动重新安装 - 都失败并出现错误。重新安装 python 3.7 也没有意义,因为它仍然存在。
(py37) [bou@bous-fed33 avguide]$ pip3 install --force-reinstall -r requirements.txt
[bou@bous-fed33 avguide]$ sudo dnf install python37
Package python3.7-3.7.9-2.fc33.x86_64 is already installed.
一段时间后我发现了一个相对简单的FIX。
管理 python 版本的方式是在虚拟 env 文件夹中使用符号链接。因此,我们所要做的就是找到 3.7.9 或您的虚拟环境使用的任何 python 版本的现有 python 二进制文件的位置,并更新符号链接以指向正确的 python 基础包。
这些是安装在我的 fedora OS/base 中的 python 版本。
[bou@bous-fed33 ~]$ ls -ltr /usr/bin/python3*
-rwxr-xr-x. 2 root root 15536 Sep 22 19:23 /usr/bin/python3.7
-rwxr-xr-x. 1 root root 15536 Sep 25 23:37 /usr/bin/python3.8
lrwxrwxrwx. 1 root root 9 Oct 7 00:19 /usr/bin/python3 -> python3.9 <<<
-rwxr-xr-x. 1 root root 15536 Oct 7 00:20 /usr/bin/python3.9 <<<
注意/usr/bin/python3 如何指向python3.9
在虚拟环境~/py37/bin/文件夹中找到符号链接
[bou@bous-fed33 avguide]$ cd ~/py37/bin/
[bou@bous-fed33 bin]$ ls -ltr python*
lrwxrwxrwx. 1 bou bou 16 Dec 29 2019 python3 -> /usr/bin/python3
lrwxrwxrwx. 1 bou bou 7 Dec 29 2019 python -> python3
注意python 如何指向python3 和python3 又指向操作系统包/usr/bin/python3 - 在fedora python 升级后不再指向/usr/bin/python3.7 而是指向新版本的python @987654337 @
所以我们需要做的就是删除现有的软链接
[bou@bous-fed33 bin]$ rm python3 python
然后在/usr/bin/python3.7 中创建指向python3.7 二进制文件的新文件或符号链接python3 和python
[bou@bous-fed33 bin]$ ln -s /usr/bin/python3.7 python3
[bou@bous-fed33 bin]$ ln -s python3 python
激活虚拟环境,检查python版本是否正确。
[bou@bous-fed33 bin]$ ls -ltr python*
lrwxrwxrwx. 1 bou bou 18 Dec 2 10:03 python3 -> /usr/bin/python3.7
lrwxrwxrwx. 1 bou bou 7 Dec 2 10:04 python -> python3
[bou@bous-fed33 avguide]$ source ~/py37/bin/activate
(py37) [bou@bous-fed33 avguide]$ python -V
Python 3.7.9
(py37) [bou@bous-fed33 avguide]$ which python
~/py37/bin/python
(py37) [bou@bous-fed33 avguide]$ python
Python 3.7.9 (default, Sep 22 2020, 09:19:36)
[GCC 10.2.1 20200826 (Red Hat 10.2.1-3)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pandas as pd
>>> quit()
我们为我们的虚拟环境恢复了正确的 python 版本,JupyterLab 现在也可以正常运行了。
(py37) [bou@bous-fed33 avguide]$ jupyter notebook --port 7777
[I 10:07:54.408 NotebookApp] JupyterLab extension loaded from /home/bou/py37/lib64/python3.7/site-packages/jupyterlab
[I 10:07:54.408 NotebookApp] JupyterLab application directory is /home/bou/py37/share/jupyter/lab
[I 10:07:54.410 NotebookApp] The Jupyter Notebook is running at:
[I 10:07:54.410 NotebookApp] https://bous-fed33:7777/
希望这有助于在基本操作系统和/或 python 升级到新版本后遇到类似问题的人使用他们的 python 虚拟环境。
【问题讨论】:
标签: virtualenv upgrade python-3.7 fedora jupyter-lab