今天,我们将学习在 Ubuntu 20.04 下为你的 Python 项目设置环境的众多方法之一。
原因
我最近参与了一项技术测试,该测试是 Python Jr 开发工作选择过程的一部分。测试附带问题描述、预期解决方案、部署指南和初始框架。在那个框架中出现了一个Pipfile安装了一些库并定义了 Python 版本的框架。这就是问题所在:Ubuntu 20.04 中的 Python 版本是3.8,项目要求使用3.9版本 ,然后我想:好吧,那就让我们安装 Python 3.9!但事情没那么简单……
我遇到了以下问题:
- 安装新版本不会使其成为系统默认值
- 此后,pip, pipenv没有按照我想要的Python版本进行适当的配置。
现在,我将向您展示我的详细分步解决方案。
安装新的 Python 版本
为了安装 Python 3.9 版,我最终使用了存储库,而不是通过编译源代码来进行安装。
添加存储库:
- linuxmi@linuxmi:~/www.linuxmi.com$ sudo add-apt-repository ppa:deadsnakes/ppa
更新软件包列表:
- linuxmi@linuxmi:~/www.linuxmi.com$ sudo apt update
安装软件包:
- linuxmi@linuxmi:~/www.linuxmi.com$ sudo apt install python3.9
可选(实际上,我建议您这样做),你可以将 Python 3.9 添加到系统 PATH:
- linuxmi@linuxmi:~/www.linuxmi.com$ sudo nano /etc/profile.d/python.sh
并添加:
PATH=/opt/python/3.9/bin/:$PATH
这将允许用户在终端中运行 pip 命令以在主目录中安装软件包。
将新版本设置为默认版本
检查是否有不同版本的Python的替代方案:
- linuxmi@linuxmi:~/www.linuxmi.com$ sudo update-alternatives --list python
如果它不存在,则会出现以下消息:
update-alternatives: 错误: 无 python 的候选项
然后执行:
- linuxmi@linuxmi:~/www.linuxmi.com$ sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.8 1
输出:
- update-alternatives: 使用 /usr/bin/python3.8 来在自动模式中提供 /usr/bin/python (python)
- linuxmi@linuxmi:~/www.linuxmi.com$ sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.9 2
输出:
- update-alternatives: 使用 /usr/bin/python3.9 来在自动模式中提供 /usr/bin/python (python)
之后,你运行以下命令:
- linuxmi@linuxmi:~/www.linuxmi.com$ sudo update-alternatives --config python
然后你会看到如下输出:
- 有 2 个候选项可用于替换 python (提供 /usr/bin/python)。
- 选择 路径 优先级 状态
- ------------------------------------------------------------
- * 0 /usr/bin/python3.9 2 自动模式
- 1 /usr/bin/python3.8 1 手动模式
- 2 /usr/bin/python3.9 2 手动模式
要维持当前值[*]请按<回车键>,或者键入选择的编号:
在上面的示例中,我最终选择了数字 2,因为它是我希望从现在开始成为默认版本的 Python 版本。
完成后,检查下 Python 版本
- linuxmi@linuxmi:~/www.linuxmi.com$ python --version
输出:
Python 3.9.7
此时,我们已经正确安装了所需的 Python 版本,并且是系统的默认版本。
pip 和 pipenv 的问题
即使您将另一个版本的 Python 设置为默认值,安装 pip 和 pipenv 最终也会转到 Python 3.8 PATH。因此,为了安装指向 Python 3.9 的 pip,我最终正常安装了 pip,然后按如下方式更新了 pip:
- linuxmi@linuxmi:~/www.linuxmi.com$ curl https://bootstrap.pypa.io/get-pip.py -o get-piy.py
进而运行:
- linuxmi@linuxmi:~/www.linuxmi.com$ python3.9 get-pip.py
输出如下:
- Defaulting to user installation because normal site-packages is not writeable
- Collecting pip
- Downloading pip-21.2.4-py3-none-any.whl (1.6 MB)
- |████████████████████████████████| 1.6 MB 5.0 kB/s
- Installing collected packages: pip
- Successfully installed pip-21.2.4
如果有权限问题,可以使用 sudo 或使用 --user 标志运行命令:
- linuxmi@linuxmi:~/www.linuxmi.com$ sudo python3.9 get-pip.py
- linuxmi@linuxmi:~/www.linuxmi.com$ python3.9 get-pip.py --user
之后,确保 pip 绑定到 Python 3.9 版:
- linuxmi@linuxmi:~/www.linuxmi.com$ pip --version
预期的输出应该是这样的:
- pip 21.2.4 from /home/linuxmi/.local/lib/python3.9/site-packages/pip (python 3.9)
正如我之前提到的,我需要安装 Pipfile 依赖项,所以我需要 pipenv。我这里是运行 pip install pipenv,pipenv 还没有链接到旧版本。如果发生这种情况,请运行:
- linuxmi@linuxmi:~/www.linuxmi.com$ sudo pip install pipenv
并且该软件包将安装在 3.9 版本中。
总结
如果你到此为止并解决了问题,那么恭喜!功劳不属于我而归于你寻求解决方案!如果没有,请告诉我们问题是什么,以便我们可以帮助你。感谢阅读,更多资讯及教程请关注Linux迷(www.linuxmi.com)。