源码包编译的安装选项

今天在给新服务器用源码包编译安装python的时候发现了之前不好解决的问题,简单来说就是安装完新版本的python之后系统中会出现两种版本的python,命令行输入python -v时会出现显示旧版本的问题,看着很难受。
原因:/usr/bin目录下的链接“python”仍然存在,指向默认系统版本的python2.6。
解决办法是:当删除它,并创建一个新的软链接指向python3.10。
但是之前在使用python的过程中会出现一些我排查不到解决办法的奇怪报错,所以今天安装的时候使用了以下的编译选项和make altinstall这个安装命令:

./configure –enable-optimizations –prefix=/usr/local/python3.10
# 编译并安装(-j4 表示使用4线程加速)
make -j4
sudo make altinstall

关键参数说明:
–enable-optimizations:启用优化,提升运行效率。
–prefix:指定安装路径,避免覆盖系统默认 Python 环境。
altinstall:保留系统原 Python 版本,

原理:altinstall跳过创建python链接和手册页链接的操作。

也就是安装python的时候make install 是可以用 make altinstall代替的,而且更好用

“make install”和“make altinstall”命令有什么区别,除了在/usr/bin中的链接之外?

—–尊重原创    原文链接:

“make install”和”make altinstall”之间的细节差异 makefile installation – Dev59

原文部分内容引用:

 

简而言之:altinstall 跳过创建 python 链接和手册页面链接,install 将隐藏系统二进制文件和手册页面。

手册页面就是 man python的显示结果,确切来说:当运行“man”程序时,它会查找已安装的手册页。在运行“altinstall”后查看2.7手册页,需要使用“man python2.7”。

让我们来看一下生成的 Makefile!

首先是安装目标:

install: altinstall bininstall maninstall
它可以完成altinstall的所有功能,还包括bininstall和maninstall

这里是bininstall;它只是创建了python和其他符号链接。

# Install the interpreter by creating a symlink chain:
# $(PYTHON) -> python2 -> python$(VERSION))
# Also create equivalent chains for other installed files
bininstall: altbininstall
-if test -f $(DESTDIR)$(BINDIR)/$(PYTHON) -o -h $(DESTDIR)$(BINDIR)/$(PYTHON); \
then rm -f $(DESTDIR)$(BINDIR)/$(PYTHON); \
else true; \
fi
(cd $(DESTDIR)$(BINDIR); $(LN) -s python2$(EXE) $(PYTHON))
-rm -f $(DESTDIR)$(BINDIR)/python2$(EXE)
(cd $(DESTDIR)$(BINDIR); $(LN) -s python$(VERSION)$(EXE) python2$(EXE))
… (More links created)
这里是maninstall,它只是创建到Python手册页面的“未版本化”的链接。
# Install the unversioned manual pages
maninstall: altmaninstall
-rm -f $(DESTDIR)$(MANDIR)/man1/python2.1
(cd $(DESTDIR)$(MANDIR)/man1; $(LN) -s python$(VERSION).1 python2.1)
-rm -f $(DESTDIR)$(MANDIR)/man1/python.1
(cd $(DESTDIR)$(MANDIR)/man1; $(LN) -s python2.1 python.1)

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部