2016-08-04 1 views
1

私はPython(Python3)アプリケーション(パッケージではありません)を書いており、正しいディレクトリ構造についていくつか疑問を持っています。私はこれを持っている現時点では: - 例えば、launch.pyへの正しいパスを付加して当然のパッケージではなくアプリケーションでモジュールをインポートする

myapp/ 
    __init__.py 
    launch.py 
    core/ 
     __init__.py 
     some_core_class.py 
     other_core_class.py 
    gui/ 
     __init__.py 
     some_gui_class.py 
     other_gui_class.py 

私は、アプリケーションが私のディレクトリ構造内の任意の場所からpython launch.pyで開始することにしたいですpython myapps/myapp/launch.py

私のモジュールの中で私は絶対的なインポートを使用しています。 some_core_class.pyにはfrom myapp.core.other_core_class import OtherCoreClassと書いてあります。私はlaunch.pyで同じ方法を使用します。 from myapp.core.some_core_class import SomeCoreClass

しかし、たとえばから直接python launch.pyと書いて起動すると、結果はImportError: No module named 'myapp'になります。 launch.pyからfrom core.some_core_class import SomeCoreClassにインポートを変更しても動作させることができましたが、これは正しい絶対インポートではなく、他のファイルのインポートと矛盾しています。

私の問題を解決する最良の方法は何ですか?私はmyappPATH環境変数を追加することを避けたいと思います。これは、ユーザーまたはインストーラが手動で編集する必要があります。アプリケーションをどこからでも起動できるように、コードまたはインポートをどのように変更する必要がありますか?それも可能ですか?

答えて

0

私はちょうど発見した、私は私のlaunch.pyの先頭に

import os 
import sys 
app_parent_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 
sys.path.append(app_parent_dir) 

を付加することでそれを解決することができます。しかし、これはとても醜いですし、ハックのように感じます。より良い方法が必要です。 Pythonは醜いはずがありません。より良い回答を待っています...

+0

私はこれが私が選択する解決策であると仮定して、この質問に他の回答はありませんでした。 –

関連する問題