使用 pyenv 在系统范围内安装特定版本的 Python

Install Python of specific version system-wide with pyenv

我正在研究在我们的项目中升级到 Python 3.6 的可能性。

现在我们正在 Ubuntu 14.04 上使用来自 ppa:fkrull/deadsnakes 的 Python 3.5.2。 PPA 还没有 Python 3.6,目前尚不清楚它何时可用。

我不想安装另一个 PPA。

我正在尝试寻找更通用的方法。

我发现有人建议使用 pyenv,它从源代码编译 Python,这听起来很有趣,因为我可以随时升级 Python,而无需等到 repo 维护者添加它。我也可以轻松安装其他 Python 风格,如 PyPy。

我还没有准备好使用 pyenv 作为虚拟环境是的,所以我想知道是否可以使用它来全局编译和安装 Python 这样我就可以直接使用它了。

https://github.com/yyuu/pyenv/wiki/Common-build-problems#installing-a-system-wide-python

Installing a system-wide Python

If you want to install a Python interpreter that's available to all users and system scripts (no pyenv), use /usr/local/ as the install path. For example:

sudo python-build 3.3.2 /usr/local/

我已经为 python3.6 in deadsnakes for trusty / xenial 贡献了一个包:)

https://launchpad.net/~fkrull/+archive/ubuntu/deadsnakes/+packages?field.name_filter=python3.6&field.status_filter=published&field.series_filter=

文档有点混乱,因为安装后 PATH 中没有添加 python-build 二进制文件。

python-build 是一个 pyenv 插件(默认安装)。文档和更多信息位于此处:https://github.com/pyenv/pyenv/tree/master/plugins/python-build.

如何为所有用户安装系统范围的 Python:1) 以 root 身份登录和 2) 安装所需的 Python 版本到 /usr/local/python-X.Y.Z

sudo ~/.pyenv/plugins/python-build/bin/python-build 3.6.1 /usr/local/python-3.6.1/

现在你可以作为普通用户使用这个Python版本,例如你可以为你的项目创建virtualenv:

/usr/local/python-3.6.1/bin/python -m venv /var/www/my-app/.env/

通过结合其他答案的提示并通读文档,我找到了一种很好的方法来完全按照您的意愿行事,该方法应该在 CI 系统或 Docker 系统中运行良好如果尚未通过 Apt 或 Yum 或 Homebrew 安装 python3.x,则在容器或开发人员计算机上。

假设您拥有构建所需版本 Python 3.x 所需的所有依赖项(任何高于 3.4 的版本都需要一些额外的包,pyenv-installer 并不总是警告您),您可以 运行 下面的命令来获得一个新的系统范围 Python 它应该可以被所有用户执行,这使得使用 python3.6 -m venv yourvenv.

很容易传递给 virtualenv 创建
curl https://pyenv.run | bash # or
wget -O - https://pyenv.run | bash

export PATH="$HOME/.pyenv/bin:$PATH"
$(pyenv which python-build) 3.6.10 /usr/local/

which python3.6
python3.6 --version
# If you get an error running the above commands, it probably means
# /usr/local/bin isn't in your PATH yet
# on Debian/Ubuntu and maybe others the /etc/environment or 
# /etc/login.defs file puts it in the path when a user logs in
echo $PATH
export PATH="/usr/local/bin:$PATH"
python3.6 --version