2015-08-22 23 views
1

這是目錄佈局子模塊的合併:如何使第二個模塊對python解釋器可見?

❯ tree 
. 
├── src1 
│   └── some 
│    ├── __init__.py 
│    ├── __init__.pyc 
│    └── fish 
│     ├── __init__.py 
│     └── __init__.pyc 
└── src2 
    └── some 
     ├── __init__.py 
     ├── __init__.pyc 
     └── bird 
      ├── __init__.py 
      └── __init__.pyc 

我希望能導入some.fishsome.bird模塊。

如果我設置環境變量PYTHONPATH這樣:

❯ export PYTHONPATH=./src1:./src2 
❯ python 
Python 2.7.9 (default, Dec 30 2014, 18:28:09) 
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.56)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import some.fish 
>>> import some.bird 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ImportError: No module named bird 
>>> 

這是不可能的,以使bird模塊some下出現?

的解決方案,我想避免:

1)改變目錄結構

2)更改父包some

在其他字的名字,我可以合併在兩個子模塊沒有將文件放在同一個目錄結構下的相同模塊名稱?

+0

是否有一個原因,包裝在兩個SRC1和SRC2有同名「some」? – skyline75489

回答

0

對於兩個模塊,您有一個衝突的名稱somesrc1中的一個和src2中的一個。爲了解決這個問題,你有很多選擇:

  • 重命名some文件夾some1some2
  • 移動birdfish到同一文件夾
  • 添加的src1家長和src2代替進口模塊,如:

    >>> import src1.some.fish 
    >>> import src2.some.bird 
    
+0

這些是我想要避免的選項。我將更新問題 –

+0

請參見第三個選項 –

+0

'src1'和'src2'不應該是模塊名稱。 –