web-dev-qa-db-ja.com

どのように/ 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
3
lese

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を使用してインストールするパッケージは、グローバルPythonインストールから分離されたvenvフォルダーに配置されます。

    通常どおりパッケージをインストールします。次に例を示します。

    $ pip install requests 
    

    現時点で仮想環境での作業が終了したら、非アクティブ化できます。

    $ deactivate
    

環境を移動する場合:

Virtualenv内にインストールされているパッケージのリストを作成できます。

    $ pip freeze > requirements.txt

そして、以下を使用してそれらを宛先virtualenvにインストールします。

    $ pip install -r requirements.txt

私の経験から、virtualenvはpython2とpython3の両方に対して作成および管理できます(私のシステムでは、virtualenvvirtualenv3の両方を持っています)

Virtualenv自体はpythonインタープリターを提供しないことに注意してください。これにより、pythonインタープリターがすでに使用可能な分離された環境を作成できます。

私見、pythonバイナリをスクリプトにバンドルすると、パッケージが大きくなるだけでなく、バ​​イナリがコンパイルされるため、スクリプトlessが移植可能になります特定のOSおよびglibcの場合。誰かが別の(linux)OS /アーキテクチャでスクリプトを使用したい場合、そのバージョンのパッケージを提供しない限り不可能です。

4
nagu