2016-05-30 74 views
0

我有兩個項目,每個項目都有一個Python文件夾,其中有一個名爲lib_py的文件夾和一些共享庫Python文件。 請注意,即使lib_py是一組共享庫,每個項目都可以具有較舊/較新版本的lib_py文件(基於其需求)。所以這就是爲什麼每個項目都需要有lib_py文件夾。該層次是像以下:在Python中導入包時發生衝突

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

在兩個項目中都main.py,example.py導入如下:

from lib_py.example import x 

爲了每個main.py訪問example.py,我在追加我sys.paths以下兩個路徑:

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

問題發生在這裏:從PROJECT1 main.py被調用時,使用好example.py但是當從PROJECT1調用main.py權後,主Project2中的.py是ca lled,再次調用Project1中的example.py,但我期望使用Project2中的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,其次導入會更復雜,因爲有很多層次。 –

+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,其次導入會更復雜,因爲有很多層次。 –

+0

不幸的。你需要明確提及它們。我的意思是所有的人! –