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一起工作。我一定错过了什么。。。