2

次のように編成された一連のpythonスクリプトがあります。

PythonScripts/
     TypeAScripts/
        TypeASet1Scripts/
            example.py
        TypeASet2Scripts/
     TypeBScripts/
        TypeBSet1Scripts/
        TypeBSet2Scripts/
     TypeCScripts/
        TypeCSet1Scripts/
        TypeCSet2Scripts/
     CommonFunctions/
        CommonFunctions.py

init.pyすべてのフォルダで。私が欲しいのは、example.pywhere example.pyimports fromを実行できるようにすることCommonFunctionsです。フォルダー A、B、および C のスクリプトで同じことを行いたいと考えています。

絶対インポートでこれを行うには、次のようにします

 import PythonScripts.CommonFunctions.CommonFunctions 

ただし、これPythonScriptsは Python パスにある場合にのみ機能します。example.pyそのフォルダーで実行しているだけの場合は、そうではありません。で追加できますがsys.append()、これは厄介な方法のようです。より良いアプローチはありますか?

4

1 に答える 1

1

Python は相対インポートをサポートしていますが、私の経験では、それらは扱いにくく、期待どおりの動作をしません。それらの詳細については、PEP 328を参照してください。

モジュールを適切にパッケージ化setup.pyし、それらをグローバルなサイトパッケージディレクトリにインストールするファイルを作成することをお勧めします。これにより、絶対インポートを使用してシステム上のどこからでもモジュールを参照できるようになり、さらに、サード パーティに配布するためにモジュールをPython Package Index (PyPi)に登録するオプションが提供されます。これを行う方法に関する優れたチュートリアルは、「The Hitchhiker's Guide to Packaging 1.0」です。

さらに、グローバルな site-packages ディレクトリの破損が心配な場合は、Python 仮想環境でテスト インストールを行うことをお勧めします。特にこのvirtualenvツールは、仮想環境での作業を簡単にします。

于 2013-02-14T05:32:24.710 に答える