如何/是否可以以可移植的方式安装 python?

如何/是否可以以可移植的方式安装 python?

我正在编写一个python脚本,该脚本负责将mysql具有特定架构/结构的数据库迁移到postgresql具有不同结构的数据库中。

在开发阶段,我在虚拟机()中工作,CentOS7所有环境都已正确设置。

目前我正处于测试阶段,我正在尝试第一次在真实服务器中运行脚本,但我已经面临着由不同环境(python 版本或 python-modules 版本不兼容)引起的麻烦。

由于我必须在许多服务器上执行这个脚本(所有服务器都是 GNU/Linux 服务器,其中大多数是 CentOS,一些是 Debian),我正在寻找一种将 python 和所有 python 模块(依赖项)直接集成到我的脚本中的方法,一种Python的可移植版本,如果你明白我的意思的话。

例如,我想将以下元素/二进制文件集成到我的脚本包中:

  • Python 2.7.5
  • mysql-连接器-python-2.1.3-1
  • python-psycopg2

答案1

virtualenv可能就是您正在寻找的。看 http://docs.python-guide.org/en/latest/dev/virtualenvs/:

虚拟环境是一种工具,通过为不同项目创建虚拟 Python 环境,将不同项目所需的依赖关系保存在不同的位置。它解决了“项目 X 依赖于版本 1.x,但项目 Y 需要 4.x”的困境,并保持全局站点包目录干净且易于管理。

通过 pip 安装 virtualenv:

$ pip install virtualenv

基本用法

  1. 为项目创建虚拟环境:

    $ cd  my_project_folder 
    $ virtualenv venv 
    

    virtualenv venv将在当前目录中创建一个文件夹,其中包含 Python 可执行文件以及 pip 库的副本,您可以使用它来安装其他包。虚拟环境的名称(在本例中为 venv)可以是任何名称;省略名称会将文件放在当前目录中。

    这会在您运行命令的目录中创建一个 Python 副本,并将其放置在名为 venv 的文件夹中。

    您还可以使用您选择的 Python 解释器。

    $ virtualenv -p /usr/bin/python2.7 venv 
    

    这将使用 /usr/bin/python2.7 中的 Python 解释器

  2. 要开始使用虚拟环境,需要激活它:

    $ source venv/bin/activate 
    

    当前虚拟环境的名称现在将显示在提示的左侧(例如 (venv)Your-Computer:your_project UserName$),让您知道它处于活动状态。从现在开始,使用 pip 安装的任何包都将放置在 venv 文件夹中,与全局 Python 安装隔离。

    像往常一样安装软件包,例如:

    $ pip install requests 
    

    如果您暂时完成了虚拟环境中的工作,则可以将其停用:

    $ deactivate
    

如果您想移动您的环境:

您可以在 virtualenv 中列出已安装的软件包:

    $ pip freeze > requirements.txt

并使用以下命令将它们安装在目标 virtualenv 上:

    $ pip install -r requirements.txt

根据我的经验,可以为 python2 和 python3 创建和管理 virtualenvs (在我的系统上,我有virtualenvvirtualenv3

请注意,virtualenv 本身并不提供 python 解释器。它允许您创建已经有 python 解释器可用的隔离环境。

恕我直言,将 python 二进制文件捆绑到你的脚本中不仅会让你的包变得更大,而且实际上会让你的脚本变得更大较少的可移植,因为二进制文件将针对特定操作系统和 glibc 进行编译。如果有人想在不同的(Linux)操作系统/体系结构上使用该脚本,除非您提供该版本的软件包,否则这是不可能的。

相关内容