Linux

如何/是否可以以攜帶式方式安裝 python?

  • July 25, 2017

我正在編寫一個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

基本用法

  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)作業系統/架構上使用該腳本,除非您提供該版本的軟體包,否則這是不可能的。

引用自:https://unix.stackexchange.com/questions/274152