因为我对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__将启动我的其余功能.
UPD
好吧,如果我把某人与我的代码混淆了,我很抱歉.
支持__init__.py的想法是该文件是在第一个包添加时由IDE创建的,因此我决定在第一个github条目中找到code(我的错,我可以通过复制粘贴重新使用它) ).
严格来说,我只需要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中
解决方法:
我做了:
foo/
__init__.py
__main__.py
这2个文件是:
import __main__
print('in init')
print('init name',__name__)
和
print('main name',__name__)
print('in main')
if __name__=='__main__':
print('in main main block')
如果我直接运行__main__:
1538:~/mypy$python foo/__main__.py
('main name', '__main__')
in main
in main main block
如果我调用目录,它也会做同样的事情.它不会导入__init__.py.
1541:~/mypy$python foo
('main name', '__main__')
in main
in main main block
但是从shell中,它会加载两个文件
1542:~/mypy$python
....
>>> import foo
('main name', 'foo.__main__')
in main
in init
('init name', 'foo')
但是它不使用__main__的if __name__块 – 名称不对,它现在是foo .__ main__.
相关文档
Execute the Python code contained in script, which must be a filesystem path (absolute or relative) referring to either a Python file, a directory containing a __main__.py file, or a zipfile containing a __main__.py file.
This module represents the (otherwise anonymous) scope in which the interpreter’s main program executes — commands read either from standard input, from a script file, or from an interactive prompt. It is this environment in which the idiomatic “conditional script” stanza causes a script to run:
我用__init__.py创建了另一个目录但没有main:
1558:~/mypy$python foo1
/usr/bin/python: can't find '__main__' module in 'foo1'
1558:~/mypy$python
...
>>> import foo1
('in init', 'foo1')
>>>
导入工作,但我无法运行该目录.
标签:python,main,initialization
来源: https://codeday.me/bug/20190608/1201490.html