因为我对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
所以我的问题是:为什么两个包都是可见的,而里面的函数却不是?我从google上读过一些源代码,但仍然看不出它和我的代码之间的区别。我在用Python 3.5.1
我假设__init__
中的代码将启动__main__
,并且__main__
将启动我的其余函数。
升级版
好吧,如果我把别人和我的代码搞混了,我很抱歉。
支持__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
所以,如C代码中所述
有一种python解决方案:
如下
__main__.py
:不需要
__init__.py
。在我的例子中,假设所有文件都位于同一目录中。欢迎修改。
嗯:
__init__.py
对import
有用(所有子目录都是搜索导入)以及
if __name__ == "__main__":
用于运行模块本身。但如果在其他脚本中导入,则不会执行这段代码
我做了:
两个文件是:
以及
如果我直接运行
__main__
:如果我调用目录,它也会执行同样的操作。它不导入
__init__.py
。但是从一个shell中,它同时加载两个文件
但它没有使用
__main__
的if __name__
块-名称不对,现在是foo.__main__
。相关文件
https://docs.python.org/2/using/cmdline.html#interface-options
https://docs.python.org/2/library/__main__.html
我用
__init__.py
创建了另一个目录,但没有主目录:import
可以,但我不能run
目录。相关问题 更多 >
编程相关推荐