2016-05-30 3 views
0

2つのプロジェクトがあります。それぞれにPythonフォルダがあり、共有ライブラリのPythonファイルとともにlib_pyという名前の別のフォルダがあります。 lib_pyでも共有ライブラリのセットであることに注意してください。各プロジェクトは古い/新しいバージョンのlib_pyファイルを必要とします。そのため、各プロジェクトにlib_pyフォルダが必要です。各main.pyがexample.pyへのアクセスを有するためにPythonでパッケージをインポートするときに競合が発生する

from lib_py.example import x 

2つのプロジェクトの両方main.pyで

Project1 
    Python 
    lib_py 
     __init__.py 
     example.py 
    main 
     main.py 
Project2 
    Python 
    lib_py 
     __init__.py 
     example.py 
    main 
     main.py 

、example.pyは以下のようにインポートさ:階層は以下のようですメイン、右のProject1からmain.pyを呼び出した後のProject1からmain.pyが呼び出され、良いexample.pyが使用されているが、とき:問題はここに起こる

D:\Project1\Python 
D:\Project2\Python 

:私は私のsys.pathsに2つの次のパスを追加しますProject2の.pyはcaです私はProject2からのexample.pyが使用されることを期待していますが、再びProject1のexample.pyが呼び出されます。

同じ名前のパッケージがいくつか見つかった場合、どのパッケージを使用するべきか正確な方法はありますか? 他にもありますか?

おかげで(のコースディレクトリ階層を変更せずに)

答えて

2

は、さてあなたはただ、プロジェクトレベルおよび他との別名をからのパスを与えるthis answer

from os import path 
import sys 
sys.path.append(path.abspath('../Foo')) 
sys.path.append(path.abspath('../Foo2')) 


from Project1.python.lib_py import example as proj1ex 
from Project2.python.lib_py import example as proj2ex 
+0

私がArun Gの提案に書いたのと同じ発言: 問題は私がここで説明したスキームは現実の非常に単純なバージョンです。実際、Project1とProject2の階層は複雑(フォルダレベルが多い)で、各プロジェクト内に多くのフォルダがあります。プロジェクトはPythonプロジェクトだけでなく、C++です。だから私があなたの提案したソリューションを使用する場合は、まず多くのフォルダ内に__ init __.pyをたくさん追加する必要があります。そして、第2に、レベルが多いのでインポートがより複雑になります。 –

+0

@pashashadkami、編集を確認してください – onkar

+0

sys.path.appendを使用するのではなく、Project1とProject2の親ディレクトリをPYTHONPATHに追加することができます – Overdrivr

1

を参照して、この

ような何かを行うことができます

from project1.python.lib_py import example as ex1 
from project2.python.lib_py import example as ex2 

ex1とex2を使用して

+0

問題は私がここで説明したスキームは現実の非常に単純なバージョンです。実際、Project1とProject2の階層は複雑(フォルダレベルが多い)で、各プロジェクト内に多くのフォルダがあります。プロジェクトはPythonプロジェクトだけでなく、C++です。だから私があなたの提案したソリューションを使用する場合は、まず多くのフォルダ内に__ init __.pyをたくさん追加する必要があります。そして、第2に、レベルが多いのでインポートがより複雑になります。残念ながら –

+0

。明示的に言及する必要があります。私はそれらのすべてを意味する! –

関連する問題