我正在编写一个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
基本用法
为项目创建虚拟环境:
$ 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 解释器
要开始使用虚拟环境,需要激活它:
$ 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 (在我的系统上,我有virtualenv
和virtualenv3
)
请注意,virtualenv 本身并不提供 python 解释器。它允许您创建已经有 python 解释器可用的隔离环境。
恕我直言,将 python 二进制文件捆绑到你的脚本中不仅会让你的包变得更大,而且实际上会让你的脚本变得更大较少的可移植,因为二进制文件将针对特定操作系统和 glibc 进行编译。如果有人想在不同的(Linux)操作系统/体系结构上使用该脚本,除非您提供该版本的软件包,否则这是不可能的。