如何/是否可以以攜帶式方式安裝 python?
我正在編寫一個
python
腳本,該腳本負責將mysql
具有特定架構/結構的數據庫遷移到postgresql
具有不同結構的數據庫中。在開發階段,我在一個虛擬機(
CentOS7
)中工作,我的所有環境都正確設置。目前我處於測試階段,我第一次嘗試在真實伺服器上執行腳本,但我已經面臨不同環境(python版本或python-modules版本不兼容)引起的麻煩。
由於我將不得不在許多伺服器中執行這個腳本(它們都是 GNU/Linux 伺服器,其中大多數是 CentOS,一些 Debian),我正在尋找一種集成 python 的方法,以及所有 python 模組(依賴項) 直接進入我的腳本,一種可移植版本的 python,如果你知道我的意思的話。
例如,我想將以下元素/二進製文件集成到我的腳本包中:
- Python 2.7.5
- mysql-connector-python-2.1.3-1
- python-psycopg2
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 解釋器 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(在我的系統上,我同時擁有
virtualenv
和virtualenv3
)請注意,virtualenv 本身並不提供 python 解釋器。它允許您創建已經有 Python 解釋器可用的隔離環境。
恕我直言,將 python 二進製文件捆綁到您的腳本中不僅會使您的包更大,而且實際上會使您的腳本不那麼可移植,因為二進製文件將針對特定的作業系統和 glibc 進行編譯。如果有人想在不同的(linux)作業系統/架構上使用該腳本,除非您提供該版本的軟體包,否則這是不可能的。