可移植的python环境
创建可移植的python环境
工作时使用的系统不联网,而且自带的python环境库不完整,每次干活都心累,所以想要做一个可移植的精简版的python环境。
开始前的准备:
- Ubuntu18.04
- python源码
- virtualenv
这里首先装Linux版本的,Windows版本的之后补上。
python源码安装
在官网下载python源码,这里使用的是python3.7.12,可以在这里下载。使用的python版本影响不大。
需要的依赖包:gcc,zlib,zlib-devel,openssl-devel,readline,readline-devel
注意:
- 在Ubuntu中zlib叫zlib1g,zlib-devel叫zlib1g-dev,所以安装时需要:
sudo apt-get install zlib1g
sudo apt-get install zlib1g-dev- 在Ubuntu中openssl-devel需要分开装:
sudo apt-get install openssl
sudo apt-get install libssl-dev
下载之后,解压,
root@yyy:~# tar zxvf Python-3.7.12.tgz
然后进入解压后的文件进行编译,
root@yyy:~# cd Python-3.7.12
root@yyy:~/Python-3.7.12# ./configure --prefix=/root/python37
...
...
等一会,结束之后就可以编译安装了,
root@yyy:~/Python-3.7.12# make && make install
...
...
再等一会,安装成功,安装路径为/root/python37
安装virtualenv
安装virtualenv可以直接使用pip install virtualenv。
创建虚拟环境
这里使用的是virtualenv20.13.3,通过帮助查看使用方法,这里介绍一些使用的选项。
这里吐槽一下,中文互联网上的文章都是来回抄的,而且内容不加验证,一大堆垃圾,没有一点用处。
virtual参数
-p或者--python,指定python解释器,通过这个参数可以指定需要的python版本;--system-site-packages,让虚拟环境可以访问系统环境的库,默认False,这里不做修改就行,之后会将直接使用虚拟环境的库;--copies,将一些需要的东西复制到虚拟环境,默认为False,我们是需要复制的;--prompt,指定虚拟环境的前缀,这个随意就行。
还有一些为了精简环境,删除了一些功能,按需修改:
--no-vcs-ignore,不知道什么用处就不需要了;--no-download,不下载最新的pip/setuptoos/wheel,默认为True;--no-pip,不安装pip,默认为False;--no-setuptools,不安装setuptools,默认为False;--no-wheel,不安装wheel,默认为False;--no-periodic-update,不要周期更新,默认为False;
最后创建虚拟环境:
root@yyy:~# virtualenv --python=/root/python37/bin/python3.7 --no-vcs-ignore --copies --system-site-packages --no-download --no-pip --no-setuptools --no-periodic-update --prompt venv venv
运行成功之后,就会有一个venv的文件夹,这就是虚拟环境了。
root@yyy:~# ls
python37 venv
root@yyy:~# source venv/bin/activate
(venv) root@yyy:~# deactivate
root@yyy:~#
可以看到(venv)就是虚拟环境的标志,这个通过--prompt参数修改。
接下来就是重头戏,让虚拟环境成为独立的环境。
虚拟环境修改
首先看一下虚拟环境的文件结构,
root@yyy:~# ls venv/
bin lib pyvenv.cfg
后来装py2的环境时发现另外有一个include文件夹,但是不影响,主要修改的是上面的三个。
修改bin
bin中包括的是启动相关的文件,包括启动脚本和解释器。
解释器包括三个python*文件,只需要留下来一个就行了,如果留下python,虚拟环境调用就使用python,如果留下python3.7,就用python3.7调用。
启动脚本只需要activate就行了,其他格式的脚本是用于不同环境的启动,按需保留。
所以最后剩下的就只有activate和python这两个文件。
打开activate文件,在第47行,VIRTUAL_ENV='/root/venv',这里指定的是虚拟环境的绝对路径,但是为了可移植性需要修改一下这里,我修改为
PWD=$(pwd)
VIRTUAL_ENV="$PWD/venv"
这样修改启动的话只能是在venv文件夹的同一个目录中启动,因为pwd获取的是当前路径,而不是文件的路径
因为实在是不知道怎么获取当前文件的绝对路径了,找了各种方法,如果有好的方法,测试之后告诉我,一定要测试一下,我也试了好多种方法。
这样bin就修改好了。
修改lib
lib保存的是库相关的东西,由于现在创建的虚拟环境都是直接使用指定解释器的库,这个可以用sys.path测试一下。我们这里直接将已安装好的python的库复制到这里,但是不要复制site-packages文件夹,由于库很多,所以可以适当的删减。
修改pyvenv.cfg
上面修改lib之后,并不能直接使用,所以需要修改pyvenv.cfg文件,我是这样修改的,
home =
implementation = CPython
version_info = 3.7.12.final.0
virtualenv = 20.13.3
include-system-site-packages = false
base-prefix =
base-exec-prefix =
base-executable = bin/python3.7
上面没有指定目录的默认当前目录。
总结
到这里就可以了,测试一下,
root@yyy:~# source venv/bin/activate
(venv) root@yyy:~# python --version
Python 3.7.12
(venv) root@yyy:~# python
Python 3.7.12 (default, Mar 18 2022, 19:42:43)
[GCC 7.5.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path
['', '/root/venv/lib/python37.zip', '/root/venv/lib/python3.7', '/root/venv/lib/python3.7/lib-dynload', '/root/venv/lib/python3.7/site-packages']
>>> ^Z
(venv) root@yyy:~# deactivate
root@yyy:~#
打包后在别的文件夹测试,然后在别的系统上测试,我在下面的系统测试过:
- ubuntu 18.04
- kali2022
- kali
- 一个不知道是什么版本的Linux,没联网,什么都没有,使用
py37的虚拟环境是提示libc.so.6缺少GLIBC25和GLIBC26,这个没有什么解决办法,系统也没有联网。
总的来说还是挺好用的。
可移植的python环境的更多相关文章
- Python环境搭建详解(Window平台)
前言 Python,是一种面向对象的解释型计算机程序设计语言,是纯粹的自由软件,Python语法简洁清晰,特色是强制用空白符作为语句缩进,具有丰富和强大的库,它常被称为胶水语言. Python是一种解 ...
- Python环境搭建-3 Python下载
python环境搭建 Python是一个跨平台.可移植的编程语言,因此可在windows.Linux和Mac OS X系统中安装使用. 安装完成后,你会得到Python解释器环境,可以通过终端输入py ...
- Python 环境搭建,开发工具,基本语法
python环境 https://www.python.org/downloads/ 现在pthon有两个版本 一个是3.5系列的 , 一个是2.7系列的.建议用3.5版本的 开发工具 PyCharm ...
- Python学习--Python 环境搭建
Python环境搭建 Python是跨平台的编程语言,可应用于Windows.Linux.Mac OS X.你可以通过终端窗口输入"python"命令来查看本地是否安装了Pytho ...
- Python环境配置安装
2016年12月20日14:15:23 -------------- 参考菜鸟教程: Python 环境搭建 | 菜鸟教程 http://www.runoob.com/python/python-i ...
- 记录下WIN下配置LINUX虚拟机及PYTHON环境
因为听说服务器端大多都是LINUX/UNIX,LINUX是程序员必须适应的编程环境,所以今天折腾了一下,给笔记本装了个LINUX虚拟机,并顺便给WINDOWS和LINUX都配置了PYTHON环境. 这 ...
- Sublime Text 2下搭建Python环境常见错误
Sublime Text 2下搭建Python环境时,最容易出的错误就是Python环境配置错误,导致build(Ctrl+B)后没有任何反应. 关于Python编程环境的配置,网上很容易搜索到.先默 ...
- 配置python环境变量(转)
默认情况下,在windows下安装python之后,系统并不会自动添加相应的环境变量.此时不能在命令行直接使用python命令. 1.首先需要在系统中注册python环境变量:假设python的安装路 ...
- (转)windows系统下Python环境的搭建
原博文地址:http://www.cnblogs.com/windinsky/archive/2012/09/20/2695520.html 这段时间在做python,觉得这个配置环境的帖子还不错,分 ...
随机推荐
- pytorch学习
1 torch.hub torch.hub是一个包含计算机视觉和自然语言处理领域的诸多经典模型调用中心API 我没有运行成功代码 https://blog.csdn.net/qq_38410428/a ...
- insert/delete/select/update 以及一些在select中常用的函数之类的
crud程序员:create,read,update.delete 一.insert 细节说明: 1.插入的数据应与字段的数据类型相同.比如把'abc'添加到int类型会错误2.数据的长度应在列的规定 ...
- 实现反向代理客户端IP透传
默认情况下,使用反向代理时,后端服务器只能看到访问是从反向代理服务器的IP,无法真正识别到客户端IP.通过配置IP透传实现后端服务器识别到客户端真实IP. 一.Apache后端服务器部署 1.1 安装 ...
- 论文翻译:2022_PACDNN: A phase-aware composite deep neural network for speech enhancement
论文地址:PACDNN:一种用于语音增强的相位感知复合深度神经网络 引用格式:Hasannezhad M,Yu H,Zhu W P,et al. PACDNN: A phase-aware compo ...
- IO_FILE——leak 任意读
在堆题没有show函数时,我们可以用 IO_FILE 进行leak,本文就记录一下如何实现这一手法. 拿一个输出函数 puts 来说,它在源码里的表现形式为 _IO_puts . _IO_puts ( ...
- Spring的AOP的底层实现原理?
aop是ioc的一个扩展功能,先有的ioc,再有的aop,只是在ioc的整个流程中新增的一个扩展点而已:BeanPostProcessor 底层实现用的是动态代理 AOP应用场景 场景一: 记录日志 ...
- C#的in/out关键字与协变逆变
C#提供了一组关键字in&out,在泛型接口和泛型委托中,若不使用关键字修饰类型参数T,则该类型参数是不可变的(即不允许协变/逆变转换),若使用in修饰类型参数T,保证"只将T用于输 ...
- 轩辕展览-VR虚拟展厅设计如何实现全景漫游功能
什么是在线3d漫游?如何在VR虚拟展厅设计之中实现3d漫游功能?让我们来分享3dVR虚拟展厅的在线漫游. 实际上,在线3d漫游就是通过3d仿真场景,使用鼠标和键盘在虚拟空间之中自由漫游,它可以从高空俯 ...
- Flume学习记录
Flume 是 Cloudera 提供的一个高可用的,高可靠的,分布式的海量日志采集.聚合和传 输的系统.Flume 基于流式架构,灵活简单. Flume基础架构 Agent Agent 是一个 JV ...
- centos7挂载U盘,查看U盘文件
.在根目录下创建挂载的目录:mkdir mnt/usb 2.查看U盘在系统中的命称:fdisk -l 3.使用mount命令挂载U盘:mount /dev/sdb1 mnt/usb,一半就是第一个 但 ...