特定のスキーマ/構造を持つpython
データベースを、別の構造を持つmysql
データベースに移行するpostgresql
スクリプトに取り組んでいます。
開発フェーズの間、私は仮想マシン(CentOS7
)私のすべての環境が正しく設定されています。
現在、テスト段階にあり、実際のサーバーで初めてスクリプトを実行しようとしていますが、別の環境(pythonバージョン、またはpython-modulesバージョンの非互換性)が原因の問題にすでに直面しています。
私はこのスクリプトを多くのサーバーで実行する必要があるため(それらのすべてはGNU/Linuxサーバーであり、そのほとんどはCentOS、一部のDebian)、pythonとすべてのpythonを統合する方法を探しています) -モジュール(依存関係)をスクリプトに直接挿入する、これは一種の移植可能なバージョンのpythonです。
例えば。スクリプトパッケージに次の要素/バイナリを統合したいと思います。
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
私の経験から、virtualenvはpython2とpython3の両方に対して作成および管理できます(私のシステムでは、virtualenv
とvirtualenv3
の両方を持っています)
Virtualenv自体はpythonインタープリターを提供しないことに注意してください。これにより、pythonインタープリターがすでに使用可能な分離された環境を作成できます。
私見、pythonバイナリをスクリプトにバンドルすると、パッケージが大きくなるだけでなく、バイナリがコンパイルされるため、スクリプトlessが移植可能になります特定のOSおよびglibcの場合。誰かが別の(linux)OS /アーキテクチャでスクリプトを使用したい場合、そのバージョンのパッケージを提供しない限り不可能です。