• 可移植的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

    注意:

    1. 在Ubuntu中zlib叫zlib1g,zlib-devel叫zlib1g-dev,所以安装时需要:
      sudo apt-get install zlib1g
      sudo apt-get install zlib1g-dev
    2. 在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就行了,其他格式的脚本是用于不同环境的启动,按需保留。

    所以最后剩下的就只有activatepython这两个文件。


    打开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缺少GLIBC25GLIBC26,这个没有什么解决办法,系统也没有联网。

    总的来说还是挺好用的。

  • 相关阅读:
    FFmpeg开发笔记(四十四)毕业设计可做的几个拉满颜值的音视频APP
    net mvc中使用vue自定义组件遇到的坑
    【SoC FPGA】HPS启动过程
    前端学习笔记02
    基于SSM的社区疫情防控信息系统
    开源AI搜索平台Search4All
    2023高教社杯数学建模C题思路代码 - 蔬菜类商品的自动定价与补货决策
    WorldPop2000年至2020年的全中国的人口统计数据
    PMP提分练习
    [附源码]java毕业设计选课管理系统
  • 原文地址:https://www.cnblogs.com/gpl2/p/16036658.html