0

私は、使用する科学プログラムのいくつかのモジュールで構成される個人用Pythonライブラリを持っています。これらは、次の構造のディレクトリに存在します。

root/__init__.py   
root/module1/__init__.py
root/module1/someprog.py
root/module1/ (...)
root/module2/__init__.py
root/module2/someprog2.py
root/module2/somecython.pyx
root/module2/somecython.so
root/module2/somefortran.f
root/module2/somefortran.so
(...)

私は常にこれらのプログラムに変更を加え、新しいファイルを追加しています。現在のセットアップが機能しているので、同じディレクトリを異なるアーキテクチャの複数のマシンと共有します。私が欲しいのは、さまざまなアーキテクチャでPythonからこれらのパッケージを使用する方法です。パッケージがすべて純粋なPythonである場合、これは問題ありません。しかし、問題は、Cythonとf2pyから(例に示されているように)コンパイルされたバイナリがいくつかあることです。

異なるシステムのPythonが関連するバイナリのみをインポートするように、これらのバイナリを再パッケージ化する賢い方法はありますか?コードを同じディレクトリに整理したいのですが。

明らかに、最も簡単な方法は、ディレクトリを複製するか、シンボリックリンクの別のディレクトリを作成することです。ただし、これは、新しいファイルが作成されたときに、シンボリックリンクを手動で更新する必要があることを意味します。

誰かが同様の問題にぶつかったことがありますか、またはこの組織の問題に対するよりPython的なアプローチを提案できますか?

4

3 に答える 3

1

おそらく、setuptools / distributeを使用する必要があります。次に、現在のプラットフォームに従ってすべてのファイルをコンパイルし、それらを適切なディレクトリにコピーして、で使用できることを確認するsetup.pyを定義できますsys.path

于 2013-01-14T10:54:39.580 に答える
0

Pythonのソースコードをコンパイルするときは、次のようにします。

ディレクトリとともにexec-prefixフラグを./configureに渡します

詳細情報:./ configure --helpは、次の情報を提供します。

インストールディレクトリ:-prefix=PREFIXはPREFIXにアーキテクチャに依存しないファイルをインストールします[/usr/ local] --exec-prefix=EPREFIXはEPREFIXにアーキテクチャに依存するファイルをインストールします[PREFIX]

お役に立てれば :)

于 2013-06-18T21:23:43.153 に答える
-1

残念ながら、これを行う方法はありません。Pythonパッケージは、完全に1つのディレクトリに存在する必要があります。PEP 382は、異なるディレクトリに分割できる名前空間パッケージのサポートを提案しましたが、拒否されました。(いずれにせよ、それらは特別なパッケージになります。)

Pythonパッケージは単一のディレクトリにある必要があるため、異なるアーキテクチャ用にコンパイルされた拡張モジュールを混在させることはできません。この問題を軽減する方法は2つあります。

  1. バイナリ拡張機能を別のディレクトリに保持し、アーキテクチャ間で共有できる共通のディレクトリにすべてのpythonパッケージを配置します。次に、バイナリ拡張用の個別のディレクトリを、。を使用してさまざまなアーキテクチャ用に選択できますPYTHONPATH
  2. さまざまなアーキテクチャのすべてのPythonファイルと拡張機能を含む共通のディレクトリを保持します。アーキテクチャごとに、パッケージ名を使用して新しいディレクトリを作成します。次に、これらの各ディレクトリにあるすべてのPythonファイルとバイナリをシンボリックリンクします。これにより、新しいファイルごとに新しいシンボリックリンクを作成する必要がありますが、コードが存在する単一の場所が引き続き許可されます。

Thorsten Kransによって提案されたオプションは、残念ながらこの問題に対して実行可能ではありません。distutils / setuptools / distributionを使用するには、すべてのpythonソースファイルを各アーキテクチャのディレクトリにインストールする必要があり、単一のディレクトリにあるという利点はありません。(これは完成したパッケージではありませんが、常に進行中です。)

于 2013-01-20T16:48:29.603 に答える