【LinuxPython】linux中通过源码方式安装python环境

news2024/11/16 0:28:07

python环境安装直接看第二部分即可。

文章目录

  • 1.背景
  • 2.python安装
  • 3.包环境复制

1.背景

部署一个线上任务时,相同的代码本地开发机正常产出数据,线上产出数据为0,排查到原因是:

...
  File "/home/disk1/wangdeyong/venv/python3_shapely_new/lib/python3.9/site-packages/mcpack/pack.py", line 15, in <module>
    import ctypes
  File "/home/disk1/wangdeyong/venv/python3_shapely_new/lib/python3.9/ctypes/__init__.py", line 8, in <module>
    from _ctypes import Union, Structure, Array
ImportError: libffi.so.5: cannot open shared object file: No such file or directory

报错线上的python环境_ctypes模块缺少文件libffi.so.5,不知道这是个啥文件,查看开发机环境中_ctypes模块路径:

map@gzdt-map-poi-yingxiang-offline04 bin$ python
Python 3.6.5 (default, May 22 2023, 13:31:24)
[GCC 4.8.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import _ctypes
>>> _ctypes.__file__
'/home/map/envs/fdbenv/python3/lib/python3.6/lib-dynload/_ctypes.cpython-36m-x86_64-linux-gnu.so'
>>> exit()

该模块在lib-dynload目录下,切换到线上环境的对应目录下,通过ldd命令查看cpython-36m-x86_64-linux-gnu.so文件的动态链接库是否存在not found的依赖:

map@gzdt-map-poi-yingxiang-offline04 bin$ cd ../lib/python3.9/lib-dynload/
map@gzdt-map-poi-yingxiang-offline04 lib-dynload$ ll | grep _ctypes
-rwxr-xr-x 1 map map  652608 2021-10-21 17:16:53 _ctypes.cpython-39-x86_64-linux-gnu.so
-rwxr-xr-x 1 map map   72808 2021-10-21 17:16:49 _ctypes_test.cpython-39-x86_64-linux-gnu.so
map@gzdt-map-poi-yingxiang-offline04 lib-dynload$ ldd _ctypes.cpython-39-x86_64-linux-gnu.so
	linux-vdso.so.1 (0x00007ffd2dff0000)
	libffi.so.5 => not found
	libdl.so.2 => /opt/compiler/gcc-8.2/lib/libdl.so.2 (0x00007fbce979e000)
	libpthread.so.0 => /opt/compiler/gcc-8.2/lib/libpthread.so.0 (0x00007fbce977f000)
	libc.so.6 => /opt/compiler/gcc-8.2/lib/libc.so.6 (0x00007fbce95da000)
	/opt/compiler/gcc-4.8.2/lib64/ld-linux-x86-64.so.2 (0x00007fbce95b2000)
map@gzdt-map-poi-yingxiang-offline04 lib-dynload$

该文件确实没有,关于该文件的作用查了一下gpt:

libffi.so.5是一个动态链接库文件,属于libffi库的第5个版本。libffi库是一个用于调用外部函数的库,它提供了一个接口,允许在运行时动态地创建函数调用接口,并将这些接口传递给外部函数。这对于与C语言编写的动态库进行交互非常有用。

在Linux系统中,动态链接库通常以.so结尾,后面跟着版本号。libffi.so.5表示libffi库的第5个版本。动态链接库可以在运行时被加载到内存中,以提供程序运行所需的函数和功能。

可以手动下载该文件到lib-dynload下解决问题,但为了保持线上环境和开发机环境的一致,避免后续其他环境问题,下面选择重新部署一个和开发机环境相同的python环境。

2.python安装

https://www.python.org/downloads/source/
下载需要的版本源码:
在这里插入图片描述
两个压缩包任意,区别只是压缩方式不同,解压后得到的文件夹是一样的。本次下载的是Gzip方式压缩的。

上传到linux服务器,tar -zxf Python-3.6.5.tgz -C ./解压缩,得到Python-3.6.5文件夹
=> cd Python-3.6.5进入文件夹
=> 执行命令./configure --prefix=/home/disk1/wangdeyong/venv/python365配置需要安装的文件夹位置(不存在会自动创建)
=> 执行命令make,作用是编译生成二进制安装文件
=> 最后执行命令make install安装,等待执行完就ok。

执行完成后会生成一个和前面配置名相同的文件夹,进入到该文件夹中可以看到文件目录如下:

map@gzdt-map-poi-yingxiang-offline04 python365$ cd /home/disk1/wangdeyong/venv/python365 && ll
总用量 16
drwxr-xr-x 2 map map 4096 2024-08-12 11:51:58 bin
drwxr-xr-x 3 map map 4096 2024-08-12 11:38:17 include
drwxr-xr-x 4 map map 4096 2024-08-12 11:38:17 lib
drwxr-xr-x 3 map map 4096 2024-08-12 11:38:17 share

此时已经成功安装完成,为了方便可以cd到bin目录下创建个python软连接:

map@gzdt-map-poi-yingxiang-offline04 python365$ cd bin/
map@gzdt-map-poi-yingxiang-offline04 bin$ ln -s python3.6 python
map@gzdt-map-poi-yingxiang-offline04 bin$ ll
总用量 24836
lrwxrwxrwx 1 map map        8 2024-08-12 11:38:17 2to3 -> 2to3-3.6
-rwxrwxr-x 1 map map      130 2024-08-12 11:38:17 2to3-3.6
-rwxrwxr-x 1 map map      271 2024-08-12 11:38:19 easy_install-3.6
lrwxrwxrwx 1 map map        7 2024-08-12 11:38:17 idle3 -> idle3.6
-rwxrwxr-x 1 map map      128 2024-08-12 11:38:17 idle3.6
-rwxrwxr-x 1 map map      243 2024-08-12 11:38:19 pip3
-rwxrwxr-x 1 map map      243 2024-08-12 11:38:19 pip3.6
lrwxrwxrwx 1 map map        8 2024-08-12 11:38:17 pydoc3 -> pydoc3.6
-rwxrwxr-x 1 map map      113 2024-08-12 11:38:17 pydoc3.6
lrwxrwxrwx 1 map map        9 2024-08-12 11:46:08 python -> python3.6
lrwxrwxrwx 1 map map        9 2024-08-12 11:38:17 python3 -> python3.6
-rwxr-xr-x 2 map map 12694446 2024-08-12 11:38:04 python3.6
lrwxrwxrwx 1 map map       17 2024-08-12 11:38:17 python3.6-config -> python3.6m-config
-rwxr-xr-x 2 map map 12694446 2024-08-12 11:38:04 python3.6m
-rwxr-xr-x 1 map map     3146 2024-08-12 11:38:17 python3.6m-config
lrwxrwxrwx 1 map map       16 2024-08-12 11:38:17 python3-config -> python3.6-config
lrwxrwxrwx 1 map map       10 2024-08-12 11:38:17 pyvenv -> pyvenv-3.6
-rwxrwxr-x 1 map map      470 2024-08-12 11:38:17 pyvenv-3.6

map@gzdt-map-poi-yingxiang-offline04 bin$ ./python -V
Python 3.6.5

这种安装方式会将python安装到指定目录,不会影响系统中其他的python环境。

3.包环境复制

通过python -m pip freeze > requirements.txt导出包列表
=> python -m pip install -r requirements.txt安装的过程中,因为原python环境存在手动安装的包,一直报找不到包路径的错误,所以直接将原python环境site-packages下的全部内容copy到新python环境的site-packages中。

# 查看原环境的模块查找路径
map@gzdt-map-poi-yingxiang-offline04 bin$ python -m site
sys.path = [
    '/home/disk1/v_wangdeyong/venv/python365/bin',
    '/home/map/envs/fdbenv/python3/lib/python36.zip',
    '/home/map/envs/fdbenv/python3/lib/python3.6',
    '/home/map/envs/fdbenv/python3/lib/python3.6/lib-dynload',
    '/home/map/envs/fdbenv/python3/lib/python3.6/site-packages',
]
USER_BASE: '/home/map/.local' (exists)
USER_SITE: '/home/map/.local/lib/python3.6/site-packages' (doesn't exist)
ENABLE_USER_SITE: True

# 查看新环境的模块查找路径
map@gzdt-map-poi-yingxiang-offline04 bin$ ./python -m site
sys.path = [
    '/home/disk1/wangdeyong/venv/python365/bin',
    '/home/disk1/wangdeyong/venv/python365/lib/python36.zip',
    '/home/disk1/wangdeyong/venv/python365/lib/python3.6',
    '/home/disk1/wangdeyong/venv/python365/lib/python3.6/lib-dynload',
    '/home/disk1/wangdeyong/venv/python365/lib/python3.6/site-packages',
]
USER_BASE: '/home/map/.local' (exists)
USER_SITE: '/home/map/.local/lib/python3.6/site-packages' (doesn't exist)
ENABLE_USER_SITE: True

map@gzdt-map-poi-yingxiang-offline04 bin$ cp -r /home/map/envs/fdbenv/python3/lib/python3.6/site-packages/* /home/disk1/wangdeyong/venv/python365/lib/python3.6/site-packages

这种直接复制的方式用pip list命令一样能显示已复制安装的包,相对于pip安装有什么弊端暂时还未发现,优先推荐pip的安装方式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2034332.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

linux搭建zabbix

zabbix简介 Zabbix是一个监控系统&#xff0c;它可以帮助我们实时检查设备的状态&#xff0c;比如服务器、网络设备等。当设备出现问题时&#xff0c;它会及时通知我们&#xff0c;让我们可以采取措施来解决。同时&#xff0c;它还可以把收集到的数据转化成图表和报告&#xf…

ITL-Internet Technology Letters

文章目录 一、期刊简介二、征稿信息三、投稿须知四、咨询 一、期刊简介 Internet Technology Letters本期旨在涵盖所有用于提高物联网性能的新兴或现代学习算法。在此背景下&#xff0c;我们打算收集有关物联网学习进展的研究论文。强烈鼓励与机器学习、计算智能、概率学习、统…

树和图()

预备知识&#xff08;可以不看&#xff09;&#xff1a; 无向图可以理解为是特殊的有向图 1. 图的遍历&#xff08;因为树可以理解为是特殊的图&#xff0c;因此这里不考虑树的遍历&#xff0c;只考虑图的遍历&#xff09; 给定一个具体的图&#xff0c;便于分析 下面是树的结构…

Servlet——个人笔记

Servlet——个人笔记 文章目录 [toc]Servlet简介Servlet命名Servlet由来实现过程 Servlet 相对 CGI 的优势简要说说什么是CGI Servlet 在IDEA中开发流程Servlet注解方式配置WebServlet注解源码WebServlet注解使用 Servlet常见容器Servlet 生命周期简介测试 Servlet 方法init()…

交叉编译util-linux

参考文章&#xff1a;https://www.cnblogs.com/wanglouxiaozi/p/17836701.html 1、下载源码 https://mirrors.edge.kernel.org/pub/linux/utils/util-linux/v2.39/2、编译 解压压缩包&#xff1a; sudo tar xvf util-linux-2.39.2.tar.gz执行autogen.sh生成configure ./aut…

解锁眼部舒压新境界:WT2605C-AT-L009眼部按摩仪蓝牙语音方案,手机APP控制,让护眼更轻松!

一、开发背景&#xff1a; 随着科技的飞速发展和人们生活品质的提升&#xff0c;眼部按摩仪作为一种能够缓解眼部疲劳、改善眼部血液循环的健康产品&#xff0c;越来越受到消费者的青睐。在众多眼部按摩仪中&#xff0c;采用WT2605C-AT-L009蓝牙模块的应用方案&#xff0c;不仅…

优思学院|PDCA和DMAIC之间如何选择?

在现代组织中&#xff0c;提升方法、质量和效率是企业追求卓越、保持竞争力的核心目标。在这条道路上&#xff0c;DMAIC&#xff08;定义、测量、分析、改进、控制&#xff09;和PDCA&#xff08;计划、执行、检查、行动&#xff09;被广泛应用于持续改进和问题解决。这两者虽然…

基于Java的大学新生入学系统设计与实现----附源码17610

摘要 随着高校规模的不断扩大和新生人数的增加&#xff0c;传统的手工登记和管理方式已经无法满足高效、准确的需求。为了提升大学新生入学迎新工作的效率和质量&#xff0c;本研究设计开发了一套基于Java的大学新生入学系统。系统通过信息技术的应用&#xff0c;集成了首页、校…

GIT IDEA 远程仓库操作

1、配置远程仓库地址 &#xff08;点击推送后如果没有配置远程仓库会让配置远程仓库&#xff09; 2、从远程仓库中下载项目到本地 3、提交->推送 更新代码&#xff08;拉取&#xff09;

PSTX250-600-70软启动器PSTX25060070面价

PSTX250-600-70软启动器PSTX25060070面价 PSTX250-600-70软启动器PSTX25060070面价 PSTX250-600-70软启动器PSTX25060070面价 PSTX250-600-70软启动器PSTX25060070说明书 PSTX250-600-70软启动器PSTX25060070接线图 PSTX250-600-70软启动器PSTX25060070引脚线 PSTX250-60…

配置错误和 IAM 弱点是云安全的主要隐患

根据云安全联盟发布的《2024 年云计算最大威胁》报告&#xff0c;通常与云服务提供商 (CSP) 相关的传统云安全问题的重要性正在持续下降。 配置错误、IAM 弱点和 API 风险仍然至关重要 这些发现延续了 2022 年报告中首次发现的轨迹&#xff0c;同时&#xff0c;诸如错误配置的…

第100+21步 ChatGPT学习:概率校准 Isotonic Regression

基于Python 3.9版本演示 一、写在前面 最近看了一篇在Lancet子刊《eClinicalMedicine》上发表的机器学习分类的文章&#xff1a;《Development of a novel dementia risk prediction model in the general population: A large, longitudinal, population-based machine-learn…

C语言中的结构体和位移段

在C语言中&#xff0c;结构体&#xff08;struct&#xff09;是一种用户自定义的数据类型&#xff0c;允许我们将不同类型的变量组合在一起&#xff0c;形成一个复合数据类型。结构体可以包含整型、浮点型、字符型等多种数据类型的成员。例如&#xff0c;我们可以定义一个表示人…

使用C语言构建Lua库

Lua 本身是用 C 语言编写的&#xff0c;因此使用 C 编写扩展可以更好地与 Lua 引擎集成&#xff0c;减少性能瓶颈&#xff0c;同时C 语言提供了对底层硬件和操作系统功能的直接访问能力&#xff0c;让 Lua 可以通过 C 扩展来实现对文件系统、网络等高级功能的支持。因为C 语言非…

The First项目报告:Web3人生模拟器,DegenReborn带你重开币圈

2023年6月14日&#xff0c;ReadON APP的首页上&#xff0c;一篇引人注目的文章《黑客马拉松奖&#xff1a;‘Degenreborn’——Meme与GameFi的梦幻交汇》跃然眼前&#xff0c;该文章巧妙融合了NFT、GameFi及Ethereum等热门话题&#xff0c;为读者带来了一场科技与娱乐的盛宴。 …

万字详述haproxy

目录 写在前面 1、Haproxy简介 2、Haproxy的安装和基本配置信息 2.1、haproxy的安装 2.2haproxy的基本配置信息 2.2.1基本配置文件global参数 2.2.2基本配置文件proxys的相关参数 2.2.2.1 default的相关参数 2.2.2.2 frontend的相关配置 2.2.2.3 backend的相关配置 …

24年下半年软考只剩下3个月时间,来得及准备吗?

过来人告诉你来得及&#xff0c;但是选对科目很重要&#xff01; 一般来说&#xff0c;自学备考软考的时间为4-5个月&#xff0c;如果大家现在才开始备考的话&#xff0c;时间就有点紧张了&#xff0c;需要加倍努力才行&#xff0c;推荐大家可以报考一些相对简单的科目&#x…

Windows Server 2012 R2服务器安装CVE-2024-38077补丁KB5040456的安装及问题解决

Windows 远程桌面授权服务远程代码执行漏洞CVE-2024-38077&#xff0c;该漏洞影响: 远程执行代码&#xff0c;漏洞最高严重性: 严重。本文记录了Windows Server 2012 R2服务器补丁KB5040456的安装及报错“此更新不适用于你的计算机”的问题解决过程。 一、漏洞相关信息 1.影响…

具有 SAM2 分段的 NDVI 无人机

在我们之前的博客文章《OAK相机扩展NDVI功能检测植物健康情况》中&#xff0c;我们探讨了 NDVI 方法以及如何使用多光谱相机计算它。 今天&#xff0c;我们通过使用带有多光谱相机的无人机并使用 SAM2 模型进行场分割和健康比较&#xff0c;将 NDVI 感知提升到一个新的水平。 …

基于Python的孔夫子旧书网热销书籍爬虫与可视化分析报告

摘要&#xff1a;随着社会的不断发展&#xff0c;数据时代的到来&#xff0c;数据的背后是什么&#xff0c;数据有什么用&#xff0c;怎么用庞大的数据来呈现出数据的价值&#xff0c;让我们一起去揭开它神秘的面纱。 以孔夫子旧书网热销书籍5本图书数据爬取为例&#xff0c;介…