特定のスキーマ/構造を持つデータベースを別の構造を持つデータベースに移行するpython
スクリプトを作成しています。mysql
postgresql
開発段階では、仮想マシン()で作業し、CentOS7
すべての環境が正しく設定されました。
現在テスト段階にあり、初めて実際のサーバーでスクリプトを実行しようとしていますが、他の環境(互換性のないPythonバージョンまたはPythonモジュールバージョン)が原因で問題が発生しています。
このスクリプトは複数のサーバーで実行する必要があるため(すべてのサーバーはGNU / Linuxサーバー、ほとんどはCentOS、一部はDebianです)PythonとすべてのPythonモジュール(依存関係)を自分のスクリプトに直接統合する方法を探しています。、何を意味するのか分からない場合は、Pythonのポータブルバージョンです。
たとえば、次の要素/バイナリを私のスクリプトパッケージに統合したいと思います。
- Python 2.7.5
- mysql-connector-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を使用してインストールされたすべてのパッケージは、グローバルPythonインストールと隔離されたvenvフォルダに配置されます。通常どおりパッケージをインストールします。たとえば、次のようになります。
$ pip install requests
仮想環境でタスクを一時的に完了したら、それを無効にできます。
$ deactivate
環境を移動したい場合:
virtualenvにインストールされているパッケージを一覧表示できます。
$ pip freeze > requirements.txt
以下を使用してターゲット virtualenv にインストールします。
$ pip install -r requirements.txt
私の経験では、python2とpython3のvirtualenvを作成して管理することができます(私のシステムにはとがvirtualenv
ありますvirtualenv3
)。
virtualenv自体はPythonインタプリタを提供しません。これにより、Pythonインタプリタをすでに使用できる孤立した環境を作成できます。
IMHO、Pythonバイナリをスクリプトにまとめると、パッケージが大きくなるだけでなく、実際にスクリプトも大きくなります。少ないバイナリは特定のオペレーティングシステムとglibc用にコンパイルされ、移植可能です。誰かが別の(Linux)OS /アーキテクチャでスクリプトを使用したい場合は、そのパッケージのバージョンを提供しないと不可能です。