python导入即使存在_init__.py也会失败

python导入即使存在_init__.py也会失败,python,Python,假设我有这个目录结构 package / __init__.py cpackage.py subpackage1/ __init__.py subpack1_call.py /lib __init__.py sub_lib.py

假设我有这个目录结构

package /
         __init__.py
         cpackage.py

        subpackage1/
                    __init__.py
                    subpack1_call.py

                    /lib
                        __init__.py
                        sub_lib.py
        subpackage2/
                    __init__.py
                    subpack2_call.py
我想在无法导入的子包1和子包2中导入cpackage 我收到valuename错误和module not found错误

我可以在子包1中轻松完成这项工作

from lib.sub_lib import hello_pr

hello_pr() 
这里没有错误,hello_pr打印我在sub_lib中定义的内容 但我无法向上移动目录,在上面的例子中,我可以轻松地移动目录 向下移动目录结构

package /
         __init__.py
         cpackage.py

        subpackage1/
                    __init__.py
                    subpack1_call.py

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

我错过了什么。我在这个网站和pydoc中研究了很多解决方案,也许我遗漏了一些东西,因为似乎没有任何东西对你的问题起作用


如果可以导入lib.sub_lib,则表示PYTHONPATH指向子包1。它应该指向包含包的目录,然后您就可以导入package.cpackage、package.subpackage1.lib.sub_lib等

您还可以将PYTHONPATH指向cpackage,然后删除此目录中的init.py,因为它没有用处,您还可以导入cpackage、subpackage1.lib.sub_lib等

基本规则是:如果PYTHONPATH=dir,那么

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)

这就是我看到的错误:文件“subpackage1.py”,第1行,from..cpackage import callsome\u one ValueError:尝试在非包中进行相对导入。您可以查看一下,并且如果设置pythonpath,然后对我的项目执行py2exe,它会在其他计算机中导致任何执行错误。(请原谅,我的问题非常可笑)当您构建应用程序时,py2exe会找到所有需要的包,甚至是那些在PYTHONPATH中访问的包,它们都打包在library.zip中。但是,分布式exe文件不依赖于PYTHONPATH(它不会查看它,以防止安装的库与程序冲突时出现问题)。因此,包将位于library.zip中,分布式exe将位于library.zip中。正确的?我不必更改os.sys?不,您不必更改sys.path(至少对于“简单”程序)。您的意思是您有PYTHONPATH=…\dir并导入sub.bib?好。。。恐怕我也有点困惑;-)无论如何,我认为它应该与py2exe一起工作,因为它可以与python一起工作。我一定错过了什么。。。