[ Content contribution] 使用pyenv管理和安装各种python版本
Tofloor
poster avatar
neko
deepin
Ecological co-builder
2024-01-18 23:57
Author

为什么使用pyenv:

1、看到很多linux新手想要修改或升级系统的python,这是非常非常非常不建议的高风险操作。python作为linux系统里的基础组件在不充分了解linux系统的情况下替换或升级很容易出现依赖python的各种系统组件出错进而导致整个系统出问题,尤其是新手很容易犯这个错误。正确的做法应该是系统的python版本交给系统自己升级,我们使用python虚拟环境。

2、pyenv可以很方便的安装和管理各种python版本
比如:

pyenv global [版本] # 很方便切换安装的各种Python版本

image.png

sudo apt install tk-dev libreadline-dev libbz2-dev libsqlite3-dev liblzma-dev libssl-dev libffi-dev zlib1g-dev
#安装开发库,编译需要,否则可能报错

pyenv install [版本] #安装指定版本的Python

image.png

里面还有很多功能,这里不过多赘述,现在开始安装pyenv。

安装Pyenv

# 下载代码
git clone https://github.com/pyenv/pyenv.git ~/.pyenv 

# 添加bash共享库加速(属于可选操作,不执行也可以)
cd ~/.pyenv && src/configure && make -C src

# 配置环境变量到.bashrc
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc

# 配置国内Python镜像站,用于加速下载Python源代码(属于可选操作,不执行也可以)
echo 'export PYTHON_BUILD_MIRROR_URL_SKIP_CHECKSUM=1' >> ~/.bashrc
echo 'export PYTHON_BUILD_MIRROR_URL="https://registry.npmmirror.com/-/binary/python/"' >> ~/.bashrc


# 使用source立即在当前终端生效,或重新打开一个终端自动生效
source ~/.bashrc 

# 现在试试执行pyenv命令
pyenv --help

现在自己尝试安装Python吧!

PS:

在Python的编译安装过程中,可能会出现一些报错提示缺少某些库,这个时候就需要通过apt命令安装对应的开发库,安装好库后需要重新编译安装Python才能生效,比如:

缺少lzma开发库
image.png

缺少openssl开发库image.png

# 安装提示缺少的开发库,一般都是以"lib"开头"-dev"结尾
sudo apt install tk-dev libreadline-dev libbz2-dev libsqlite3-dev liblzma-dev libssl-dev libffi-dev

#卸载已经安装的
pyenv uninstall 3.12.1 

#重新编译安装 
pyenv install 3.12.1
Reply Favorite View the author
All Replies
阿尼樱奈奈
Moderator
2024-01-19 08:04
#1
like
Reply View the author
deepin-superuser
deepin
2024-01-19 08:22
#2

python 有 pyenv

node 有 nvm

java 啥时候才有一个方便的版本管理工具

Reply View the author
翻过山峰看见云
deepin
2024-01-19 09:39
#3
deepin-superuser

python 有 pyenv

node 有 nvm

java 啥时候才有一个方便的版本管理工具

jdk可以使用sdkman

另外最近发现一个versionfox:https://github.com/version-fox/vfox,同时支持常见的node,python,java版本管理

Reply View the author
neko
deepin
Ecological co-builder
2024-01-19 09:43
#4
翻过山峰看见云

jdk可以使用sdkman

另外最近发现一个versionfox:https://github.com/version-fox/vfox,同时支持常见的node,python,java版本管理

这个看起来很不错诶

Reply View the author
Future
deepin
2024-01-30 23:31
#5

哥哥写的太好了

Reply View the author
噗噗
deepin
2024-07-13 09:29
#6

deepin 23 RC2 pyenv install 3.12

安装python 3.12报错了

Python/fileutils.c: In function ‘_Py_closerange’:
Python/fileutils.c:2911:9: error: implicit declaration of function ‘close_range’ [-Werror=implicit-function-declaration]
 2911 |     if (close_range(first, last, 0) == 0) {
      |         ^~~~~~~~~~~
gcc -c -fno-strict-overflow -Wsign-compare -DNDEBUG -g -O3 -Wall    -std=c11 -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wstrict-prototypes -Werror=implicit-function-declaration -fvisibility=hidden  -I./Include/internal  -I. -I./Include -I/home/nagisa/.pyenv/versions/3.12.4/include -I/home/nagisa/.pyenv/versions/3.12.4/include -fPIC -DPy_BUILD_CORE -o Python/suggestions.o Python/suggestions.c
cc1: some warnings being treated as errors
make: *** [Makefile:2739:Python/fileutils.o] 错误 1
make: *** 正在等待未完成的任务....

看样子是close_range函数没有实现,又遇到这个问题的吗?

如何解决?

Reply View the author
neko
deepin
Ecological co-builder
2024-07-13 19:46
#7
噗噗

deepin 23 RC2 pyenv install 3.12

安装python 3.12报错了

Python/fileutils.c: In function ‘_Py_closerange’:
Python/fileutils.c:2911:9: error: implicit declaration of function ‘close_range’ [-Werror=implicit-function-declaration]
 2911 |     if (close_range(first, last, 0) == 0) {
      |         ^~~~~~~~~~~
gcc -c -fno-strict-overflow -Wsign-compare -DNDEBUG -g -O3 -Wall    -std=c11 -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wstrict-prototypes -Werror=implicit-function-declaration -fvisibility=hidden  -I./Include/internal  -I. -I./Include -I/home/nagisa/.pyenv/versions/3.12.4/include -I/home/nagisa/.pyenv/versions/3.12.4/include -fPIC -DPy_BUILD_CORE -o Python/suggestions.o Python/suggestions.c
cc1: some warnings being treated as errors
make: *** [Makefile:2739:Python/fileutils.o] 错误 1
make: *** 正在等待未完成的任务....

看样子是close_range函数没有实现,又遇到这个问题的吗?

如何解决?

这个好像是内核的问题,你试试降级内核

Reply View the author
噗噗
deepin
2024-07-14 17:22
#8
neko

这个好像是内核的问题,你试试降级内核

我全新安装的23 RC2,这可咋降级

Reply View the author
neko
deepin
Ecological co-builder
2024-07-14 19:41
#9
噗噗

我全新安装的23 RC2,这可咋降级

apt list |grep linux-headers查询所有版本

,然后复制包名安装

sudo apt install linux-headers-xxxxx还有个linux-image-xxxxx这两个包版本号要一致

Reply View the author
噗噗
deepin
2024-07-14 23:34
#10
neko

apt list |grep linux-headers查询所有版本

,然后复制包名安装

sudo apt install linux-headers-xxxxx还有个linux-image-xxxxx这两个包版本号要一致

感谢!

我尝试一下 linux-image-6.1.32-amd64-desktop-hwe 这个版本

Reply View the author
噗噗
deepin
2024-07-15 00:14
#11
噗噗

感谢!

我尝试一下 linux-image-6.1.32-amd64-desktop-hwe 这个版本

看来这个版本的内核还是不行, :(

image.png

Reply View the author
neko
deepin
Ecological co-builder
2024-07-15 00:17
#12
噗噗

看来这个版本的内核还是不行, :(

image.png

不行的话换anaconda之类的虚拟环境吧

Reply View the author
噗噗
deepin
2024-07-16 23:12
#13
neko

不行的话换anaconda之类的虚拟环境吧

不用了,现在我用venv了。

给大家参考:

python -m venv ~/VENV

vim ~/.bashrc

# 添加自动触发参数
pyvenv () {
    source ~/VENV/bin/activate
}

# 下次要用时:
pyvenv
# 即可激活全局venv

Reply View the author
流浪的加菲
deepin
2024-07-19 09:56
#14

好家伙,这是用了百度的AI搜索的教程吧,哈哈

image.png

Reply View the author
neko
deepin
Ecological co-builder
2024-07-19 10:03
#15
流浪的加菲

好家伙,这是用了百度的AI搜索的教程吧,哈哈

image.png

pyenv的github地址里面就有joy

Reply View the author
蓝鲸
deepin
2024-08-26 16:46
#16
噗噗

不用了,现在我用venv了。

给大家参考:

python -m venv ~/VENV

vim ~/.bashrc

# 添加自动触发参数
pyvenv () {
    source ~/VENV/bin/activate
}

# 下次要用时:
pyvenv
# 即可激活全局venv

个人认为这个解决办法更灵活。like

Reply View the author