2013-01-25 63 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