2013-01-25 62 views
1

假設我有這樣的目錄結構蟒蛇導入失敗,即使__init__.py存在

package/
     __init__.py 
     cpackage.py 

     subpackage1/ 
        __init__.py 
        subpack1_call.py 

        /lib 
         __init__.py 
         sub_lib.py 
     subpackage2/ 
        __init__.py 
        subpack2_call.py 

我想在subpackage1和subpackage2對此我無法導入 導入在CPackage我得到VALUENAME錯誤和模塊未找到錯誤

這裏,我可以很容易地做到這一點在subpackage1

from lib.sub_lib import hello_pr 

hello_pr() 

這裏沒有任何錯誤和hello_pr打印我在蘇定義b_lib 但我無法向上移動目錄,在上述情況下,我可以很容易地將 向下移動到目錄結構中

我在想什麼。我已經看了這麼多的解決方案在這個網站和pydoc,也許我失去了一些東西,因爲沒有什麼似乎工作

回答

1

如果你可以導入lib.sub_lib,這意味着你的PYTHONPATH點subpackage1。它應該指向包含包的目錄,然後你就可以導入package.cpackage,package.subpackage1.lib.sub_lib等

您也可以將您的PYTHONPATH到在CPackage,然後取出初始化。 PY在此目錄中,因爲它是無用的,你可以導入在CPackage,subpackage1.lib.sub_lib等

的基本規則是:如果它我看到PYTHONPATH =目錄,然後

dir\ 
    bob.py 
    sub\ 
    __init__.py 
    bib.py 
    inner\ 
     __init__.py 
     bub.py 

import bob 
import sub  (will import sub\__init__.py) 
import sub.bib (will import sub\__init__.py then bib.py) 
import sub.inner (will import sub\__init__.py then sub\inner\__init__.py) 
import sub.inner.bub (will import sub\__init__.py then sub\inner\__init__.py 
         and finally bub.py) 
+0

它會導致某些其他計算機發生執行錯誤。 (請原諒我的問題非常荒謬) – rakesh

+0

當您構建您的應用程序時,py2exe會查找所有需要的軟件包,甚至是那些在PYTHONPATH中訪問的軟件包,並將它們打包在library.zip中。但是,分發的exe文件不依賴於PYTHONPATH(它不會看它,以防止安裝的庫與您的程序衝突時出現問題)。 – 2013-01-25 08:53:24

+0

所以這個軟件包將會在library.zip和分發的exe文件中看起來在library.zip中。對?我不必更改os.sys? – rakesh

1

解析並重新分析你的問題幾次後,我已經決定你在找什麼因爲是relative imports

from ..cpackage import somename 
+0

這個錯誤:文件「subpackage1.py」,第1行,在 from ..cpackage import callsll _one ValueError:試圖在非packag中進行相對導入 – rakesh

+0

您可以查看http://stackoverflow.com/questions/5803781/py2exe-cannot-import-module-from-other-directory和http:// stackoverflow。如果設置pythonpath,然後執行我的項目的py2exe,將執行以下操作:http://www.py2exe.org/index.cgi/FAQ – 2013-01-26 20:55:11