在python 3.5随附的Ubuntu 16.04上运行python 3.7的最佳方法


18

我想避免反向移植,它们似乎总是弄乱我的包裹。

所以我在想像conda / virtualenv /甚至docker这样的工具都可以提供帮助。在系统上使用python 3.7的最简单/最干净的方法是什么?


1
查看pyenv
Naftuli Kay

Answers:


33

这应该可以让您在Ubuntu 16.04上使用Python 3.7并开始运行

# Install requirements
sudo apt-get install -y build-essential \
checkinstall \
libreadline-gplv2-dev \
libncursesw5-dev \
libssl-dev \
libsqlite3-dev \
tk-dev \
libgdbm-dev \
libc6-dev \
libbz2-dev \
zlib1g-dev \
openssl \
libffi-dev \
python3-dev \
python3-setuptools \
wget

# Prepare to build
mkdir /tmp/Python37
cd /tmp/Python37

# Pull down Python 3.7, build, and install
wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tar.xz
tar xvf Python-3.7.0.tar.xz
cd /tmp/Python37/Python-3.7.0
./configure
sudo make altinstall

然后,您可以像这样调用Python:

python3.7 ./yourScript.py

这是Docker容器中共存的多个Python版本的屏幕快照,以及如何区分它们:

如何调用不同版本的Python

Pip应该也已与此安装一起安装。要安装软件包,请使用以下格式:

pip3.7 --version

1
这就像一个魅力。我能够安装python3.7。唯一需要注意的是使用sudo make altinstall,因为普通用户无法访问目录。所有apt-get也都使用sudo安装。非常感谢您分享信息。
Doogle,

请注意,对我而言,接受的答案很好。我apt install libffi-dev还必须避免在altinstall步骤(Ubuntu 16.04 LTS)中出现以下错误:python ModuleNotFoundError: No module named '_ctypes'
moshisushi

@moshisushi我在寻求解决方案时也遇到了这个问题。因此,我已经在初始安装中包含了libffi-dev。
Sn3akyP3t3

1
@Doogle在需要时使用sudo前缀命令。感谢您指出了这一点。这些步骤是从假设root用户的Docker容器构建步骤中提取的。
Sn3akyP3t3

3

我不建议手动摆弄源代码安装和路径。使用pyenv并避免麻烦。

您要做的就是:

  • 运行pyenv安装程序
  • 遵循指示
  • 安装所需的Python版本
  • 选择要用于给定目录或全局的Python版本

例如,要安装3.7,请检查哪些版本可用:

pyenv install -l | grep 3.7

然后运行:

pyenv install 3.7.1

现在,您可以选择您的Python版本:

pyenv global 3.7.1

这将使您python指向3.7.1。如果要使用系统python,请运行:

pyenv global system

要检查可用的Python版本,请运行pyenv versions


0

您可以从www.python.org下载源代码,从源代码进行编译和构建,然后选择:

1)在python可执行文件PATH和库的路径之前添加LD_LIBRARY_PATH

2)做我所做的事情,然后从源代码进行编译和构建,并建立指向可执行文件的符号链接 /usr/bin。您可以调用它python37来区别于python 3.5已安装的软件。

默认情况下,第一种方法将在您的环境中使用它,而第二种方法打开时,则必须使用用于符号链接的命令来指定它。您可能要先使用第二种方法,然后再将其设为python 3.7仍在开发中的默认方法。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.