__main__.py文件是用来做什么的,我应该把什么类型的代码放进去,什么时候应该有一个?

通常,通过在命令行中命名.py文件来运行python程序:

$ python my_program.py

您还可以创建一个包含代码的目录或压缩文件,并包括一个__main__.py。然后您可以在命令行上简单地命名目录或zipfile,它会自动执行__main__.py:

$ python my_program_dir

$ python my_program.zip

# Or, if the program is accessible as a module

$ python -m my_program

您必须自己决定是否可以从这样的执行中获益。

注意,__main__模块通常不来自__main__.py文件。它可以,但通常不会。当运行像python my_program.py这样的脚本时,该脚本将作为__main__模块而不是my_program模块运行。对于以python -m my_module或其他几种方式运行的模块也会发生这种情况。

如果您在错误消息中看到名称__main__,这并不意味着您应该查找__main__.py文件。

我发现python -m program_dir和python program_dir有点不同:后者从不在目录中运行__init__.py(如果有)。

@布莱克:现在似乎不是这样。我刚试过python3 program_dir,它运行__init__.py。

@mk12我使用python 2.7。所以…

__main__.py文件的用途是什么?

创建python模块时,通常让模块在作为程序入口点运行时执行一些功能(通常包含在main函数中)。这通常是通过在大多数python文件的底部放置以下常见的习惯用法来完成的:

if __name__ == '__main__':

# execute only if run as the entry point into the program

main()

对于使用__main__.py的python包,您可以获得相同的语义。这是一个Linux shell提示,$,如果Windows上没有bash(或其他posix shell),只需在demo/____.py上创建这些文件,内容在EOF之间:

$ mkdir demo

$ cat > demo/__init__.py << EOF

print('demo/__init__.py executed')

def main():

print('main executed')

EOF

$ cat > demo/__main__.py << EOF

print('demo/__main__.py executed')

from __init__ import main

main()

EOF

(在posix/bash shell中,通过在每个cat命令末尾输入ctrl+d(文件结束字符),可以在不使用<< EOFs和结束EOF的情况下执行上述操作)

现在:

$ python demo

demo/__main__.py executed

demo/__init__.py executed

main executed

你可以从文档中得到这个。文件上说:

__main__ — Top-level script environment

'__main__' is the name of the scope in which top-level code executes.

A module’s __name__ is set equal to '__main__' when read from standard

input, a script, or from an interactive prompt.

A module can discover whether or not it is running in the main scope

by checking its own __name__, which allows a common idiom for

conditionally executing code in a module when it is run as a script or

with python -m but not when it is imported:

if __name__ == '__main__':

# execute only if run as a script

main()

For a package, the same effect can be achieved by including a

__main__.py module, the contents of which will be executed when the module is run with -m.

拉链

您也可以将它打包成一个单独的文件,然后像这样从命令行运行它-但是请注意,压缩包不能作为入口点执行子包或子模块:

$ python -m zipfile -c demo.zip demo/*

$ python demo.zip

demo/__main__.py executed

demo/__init__.py executed

main() executed

__main__.py用于zip文件中的python程序。运行zip文件时将执行__main__.py文件。例如,如果zip文件是这样的:

test.zip

__main__.py

其中__main__.py的含量为

import sys

print"hello %s" % sys.argv[1]

然后,如果我们运行python test.zip world,我们将把hello world取出来。

因此,当对zip文件调用python时,__main__.py文件将运行。

在yourpackage中创建__main__.py使其可执行为:

$ python -m yourpackage

如果只有程序作为模块可访问,那么-m才有效,否则可以使用python注:没有-m选项

@Benyaminjafari不能编写不能作为模块访问的命令行python程序。也许你是指package?

当我们创建一个包含main.py的python包来运行它时,python -m不起作用,-m是一个冗余选项,但是python工作得很好。

如果脚本是目录或zip文件而不是单个python文件,则当"script"作为参数传递给python解释器时,将执行__main__.py。

python中main.py是什么意思_关于python:什么是__main__.py?相关推荐

  1. python中导入模块使用哪个关键字_关于python导入模块的关键字介绍

    关于python导入模块的关键字介绍 发布时间:2020-04-17 10:13:26 来源:亿速云 阅读:101 作者:小新 今天小编给大家分享的是关于python导入模块的关键字介绍,很多人都不太 ...

  2. python没有main函数的概念吗_为什么Python没有main函数?

    作者 | 豌豆花下猫 来源 | Python猫(ID:python_cat) 众所周知,Python中没有所谓的main函数,但是网上经常有文章提到" Python的main函数" ...

  3. python中变量和函数的区别_关于python中带下划线的变量和函数 的意义

    Python 的代码风格由 PEP 8 描述.这个文档描述了 Python 编程风格的方方面面.在遵守这个文档的条件下,不同程序员编写的 Python 代码可以保持最大程度的相似风格.这样就易于阅读, ...

  4. 在python中print表示的数据类型是_【Python连载】那些必须掌握的Python数据类型

    原标题:[Python连载]那些必须掌握的Python数据类型 经过近几年的发展,Python已成为了数据科学和机器学习的首选语言,许多人也因此开始走上自学python之路.从今天开始,本公众号将陆续 ...

  5. python中的打印是什么意思_对python:print打印时加u的含义详解

    对python:print打印时加u的含义详解 u:表示unicode字符串 不是仅仅是针对中文, 可以针对任何的字符串,代表是对字符串进行unicode编码. 一般英文字符在使用各种编码下, 基本都 ...

  6. 在python中定义类时、运算符重载_自定义 Python 类中的运算符和函数重载(上)...

    如果你对 Python 中的str对象使用过 + 或 * 运算符,你一定注意到了它的操作与 int 或 float 类型的区别: 你可能想知道同一内置运算符或函数如何对不同类对象进行不同操作的.这分别 ...

  7. python中对象和变量的关系_浅析python中的类变量和对象变量

    刚学python,学到了有关于类和对象的地方.对一个概念有点模糊,后来通过实践编码找到一定规律 在python中 class test(object): id=2 name='tt' list=['t ...

  8. python中的super用法详解_【Python】【类】super用法详解

    一.问题的发现与提出 在Python类的方法(method)中,要调用父类的某个方法,在Python 2.2以前,通常的写法如代码段1: 代码段1: class A: def __init__(sel ...

  9. python中对象的概念是什么_简述Python中的面向对象编程的概念

    面向对象编程--Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. 面向过程的程序设计把计算机 ...

  10. python中的append()有什么功能_在python中append()函数能做什么

    python中的append()方法用于在列表末尾添加新的对象. append()方法语法:list.append(obj) 参数 obj -- 添加到列表末尾的对象. 返回值:该方法无返回值,但是会 ...

最新文章

  1. 动感灯箱制作流程培训_向客户推荐灯箱,这16种灯箱你一定要知道
  2. 深度学习常见概念解析
  3. 线性代数一之矩阵转向量随机化求解——神奇的矩阵(BZOJ)+向量内积
  4. apicloud模块和html,APICloud教程
  5. 国产特斯拉Model Y已开始向欧洲用户交付
  6. ASP.NET MVC 5 学习教程:修改视图和布局页
  7. [转] Mou 一个Markdown工具 语法规则文档(最后)
  8. 宛如造句,小学生怎么用宛如造句?
  9. 算法精解 c语言描述 pdf,【2020新书】C语言算法导论,Introducing Algorithms in C,174页pdf...
  10. WiFi 802.11可调参数说明---信标间隔(Beacon Interval)
  11. jndi step by step(2)
  12. 一场接近于失败的胜利:CIA“星门计划”始末
  13. 禁用计算机安全模式,安全模式
  14. 空间实景三维激光点云数据处理服务来了!
  15. java二维码生成 使用SSM框架 搭建属于自己的APP二维码合成、解析、下载
  16. 钓鱼Wi-Fi搭建实践
  17. linux双系统启动引导,linux windows 双系统并存与启动引导
  18. android 角标最新设置方案
  19. swift Dictionary 字典
  20. 通过网线和EasyFatAP软件切换AP工作模式(瘦版切换胖版)

热门文章

  1. 专访最强夫妻店:“神庙逃亡2”开发背后的故事
  2. android手机固件升级原理,为什么常说Android手机千万别频繁的系统升级,背后的真实原因?...
  3. javascript编写奇迹mu原版(含服务端)(5)前端测试可行性
  4. 笔试题--移动手机号短号
  5. flash 磨损均衡处理
  6. git报错:error.GitError: manifests rev-list (‘^HEAD‘, ‘14686468c69c63f1995ab2a0a9ad90b2e1d5e01c‘, ‘--‘)
  7. VMware中Linux网络配置VMnet8还原默认配置不成功解决办法(亲测有效)
  8. 第五 python中格式化输入input()函数的使用
  9. 捕鱼达人(unity实现)
  10. MI5s安装LineageOS 16