由于我是 python 的新手,所以语言的这一特殊方面对我来说仍然不透明。
因此,假设我的项目包含许多文件,其中包含执行操作的代码和两个“服务”文件: __init__.py
和 __main__.py
在 __init__.py
只有:
if __name__ == "__main__":
import package.__main__
__main__.main()
而在 __main__.py
如下:
import package # ok
import package2 # ok
def main():
package.myfunc1() # can't find reference to myfunc1
package2.myfunc2() # can't find reference to myfunc2
所以我的问题是:为什么两个包都可见,而里面的函数却不可见?我已经从谷歌阅读了一些源代码,但仍然无法发现它和我的代码之间的区别。我正在使用 Python 3.5.1
我假设 __init__
中的代码将启动 __main__
和 __main__
将启动我的其余功能。
更新程序
好吧,如果我把别人和我的代码搞混了,我深表歉意。背后的想法 __init__.py
文件是在添加第一个包时由 IDE 创建的,所以我决定用第一个 github 条目上的 代码 填充它(我的错,我虽然它可以重新使用通过复制粘贴)。
严格来说我只需要 python 构造,相当于这个 C 代码:
header.h
void func1(){...} //in code1.c
void func2(){...} //in code2.c
#include "header.h"
int main() //in main.c
{
func1();
func2();
return 0;
}
和下面的代码
import package
import package2
if __name__ == "__main__":
package.myfunc1()
package2.myfunc2()
与上述问题完全相同,所以问题不在 __init__.py
原文由 im_infamous 发布,翻译遵循 CC BY-SA 4.0 许可协议
我做了:
2个文件是:
和
如果我直接运行
__main__
:如果我调用该目录,它会做同样的事情。它不导入
__init__.py
。但是从 shell 中,它加载了两个文件
但它不使用
if __name__
块__main__
名称不正确,现在是foo.__main__
。相关文件
https://docs.python.org/2/using/cmdline.html#interface-options
https://docs.python.org/2/library/\main.html
我用
__init__.py
创建了另一个目录,但没有主目录:import
有效,但我不能run
目录。