2017-11-28 10 views
1

質問があります。ルートとサブパスの両方からクラスをロードできるようにしたい

私のPythonのプロジェクトのパスは以下の通りです:b.py.からcode_subの

 

    code_root 
    | 
    - code_sub 
    | |- b.py 
    | -- c.py 
    - a.py 

輸入c.py

私はcode_rootとcode_subパスの両方からb.pyをロードできるようにしたい。例えば

 

    code_root>$ python nlp.py 

または

 

    code_root/code_sub>$ python b.py 

ここでの問題はc.py.を呼び出すことです

b.pyは次のようにc.pyインポートしないでください。

 


    # b.py 
    import c 

 

は、だから、私は解決策を見つけました。以下のような

 


    from os.path import dirname 
    curpath = dirname(__file__) 

    if len(curpath) == 0: 
     curpath = '.' 
    c = imp.load_source('c', curpath+'/c.py') 

 

これは動作しますが、それが最善の解決策のように見えるしていません。同じことを達成するために使用できる標準的なPythonアプローチがありますか?

答えて

2

私は通常以下のようにプロジェクトを設定し、インポートには完全修飾パスを使用します。また、仮想環境を使用することを強くお勧めします。次に、 "add2virtualenv MyWorkinator、workinator"というコマンドを使用すると、インポートがずっと簡単になります。 c.pyで

MyWorkinator (Project level folder) 
    | 
    - workinator (All code here) 
     | 
     - package_a 
     | 
     - a1.py 
     - a2.py 
     - package_b 
     | 
     - b1.py 
     - b2.py 
     c.py 

import workinator.package_a.a1 
:b2.pyで

import workinator.package_b.b1 

関連する問題