精华内容
下载资源
问答
  • 为什么python不需要编译
    千次阅读
    2021-01-14 03:23:11

    注:作者否认在这方面有很深的专业知识。有些断言可能不正确。

    Python实际上被编译成字节码,它由Python解释器运行。无论何时使用Python模块,Python都将生成一个.pyc文件,该文件的名称与该模块相对应。这相当于编译C文件时生成的.o文件。在

    因此,如果您想反汇编一些东西,.pyc文件应该是:)

    Python在编译模块时所经历的过程与gcc或其他C编译器对C源代码所做的非常相似。主要的区别在于,它作为文件执行的一部分是透明的。它也是可选的:当运行一个非模块,即最终用户脚本时,Python将只解释代码而不是首先编译它。在

    所以你的问题是“为什么python程序是作为源代码而不是编译模块分发的?”或者,换句话说,“为什么C应用程序是作为编译的二进制文件而不是源代码分发的?”在

    过去,C应用程序作为源代码分发是非常常见的。这要追溯到操作系统及其各种子实体(即linux发行版)建立之前。有些发行版,例如gentoo,仍然将应用程序作为源代码分发。一些更尖端或更模糊的应用仍然作为源代码分发给所有目标平台。在

    原因是兼容性和依赖性。之所以可以在Mac上运行预编译的二进制Safari,或者在ubuntulinux上运行Firefox,是因为它是专门为那个操作系统、架构(例如x86_64)和一组库而构建的。在

    不幸的是,一个大型应用程序的编译非常缓慢,每次更新应用程序时都需要至少部分地重新编译。因此,二元分布的动机。在

    那么为什么不创建Python的二进制发行版呢?首先,正如亚伦mentions,每个新版本的Python字节码都需要重新编译模块。但这类似于重新构建一个C应用程序来链接到一个新版本的动态库——Python

    更多相关内容
  • python程序不需要编译

    千次阅读 2020-12-06 11:25:57
    python编译过程和执行原理(1)python执行原理这里的解释执行是相对于编译执行而言的。我们都知道,使用C/C++之类的编译性语言编写的程序,是需要从源文件转换成计算机使用的机器语言,经过链接器链接之后形成了二进制...

    python编译过程和执行原理

    (1)python执行原理

    这里的解释执行是相对于编译执行而言的。我们都知道,使用C/C++之类的编译性语言编写的程序,是需要从源文件转换成计算机使用的

    机器语言,经过链接器链接之后形成了二进制的可执行文件。运行该程序的时候,就可以把二进制程序从硬盘载入到内存中并运行。

    但是对于Python而言,python源码不需要编译成二进制代码,它可以直接从源代码运行程序。当我们运行python文件程序的时候,

    python解释器将源代码转换为字节码,然后再由python解释器来执行这些字节码。这样,python就不用担心程序的编译,库的链接加载

    等问题了。

    对于python解释语言,有以下3方面的特性:

    每次运行都要进行转换成字节码,然后再有虚拟机把字节码转换成机器语言,最后才能在硬件上运行。与编译性语言相比,每次多出了编

    译和链接的过程,性能肯定会受到影响;而python并不是每次都需要转换字节码,解释器在转换之前会判断代码文件的修改时间是否与

    上一次转换后的字节码pyc文件的修改时间一致,若不一致才会重新转换。

    由于不用关心程序的编译和库的链接等问题,开发的工作也就更加轻松啦。

    python代码与机器底层更远了,python程序更加易于移植,基本上无需改动就能在多平台上运行。

    在具体计算机上实现一种语言,首先要确定的是表示该语言语义解释的虚拟计算机,一个关键的问题是程序执行时的基本表示是实际计算

    机上的机器语言还是虚拟机的机器语言。这个问题决定了语言的实现。根据这个问题的回答,可以将程序设计语言划分为两大类:编译型

    语言和解释型语言。

    编译实现的语言,如:C、C++、Fortran、Pascal、Ada。由编译型语言编写的源程序需要经过编译,汇编和链接才能输出目标代码,然

    后由机器执行目标代码。目标代码是有机器指令组成,不能独立运行,因为源程序中可能使用了一些汇编程序不能解释引用的库函数,而

    库函数又不在源程序中,此时还需要链接程序完成外部引用和目标模板调用的链接任务,最后才能输出可执行代码。

    解释型语言,解释器不产生目标机器代码,而是产生中间代码,这种中间代码与机器代码不同,中间代码的解释是由软件支持的,不能

    直接使用在硬件上。该软件解释器通常会导致执行效率较低,用解释型语言编写的程序是由另一个可以理解中间代码的解释程序执行的。

    和编译的程序不同的是, 解释程序的任务是逐一将源代码的语句解释成可执行的机器指令,不需要将源程序翻译成目标代码再执行。对于

    解释型语言,需要一个专门的解释器来执行该程序,每条语句只有在执行是才能被翻译,这种解释型语言每执行一次就翻译一次,因而效

    率低下。

    Java解释器,java很特殊,java是需要编译的,但是没有直接编译成机器语言,而是编译成字节码,然后在Java虚拟机上用解释的方式执

    行字节码。Python也使用了类似的方式,先将python编译成python字节码,然后由一个专门的python字节码解释器负责解释执行字节

    码。

    python是一门解释语言,但是出于效率的考虑,提供了一种编译的方法。编译之后就得到pyc文件,存储了字节码。python这点和java

    很类似,但是java与python不同的是,python是一个解释型的语言,所以编译字节码不是一个强制的操作,事实上,编译是一个自动的

    过程,一般不会在意它的存在。编译成字节码可以节省加载模块的时间,提高效率。

    除了效率之外,字节码的形式也增加了反向工程的难度,可以保护源代码。这个只是一定程度上的保护,反编译还是可以的。

    (2)Python内部执行过程

    一、编译过程概述

    当我们执行Python代码的时候,在Python解释器用四个过程“拆解”我们的代码,最终被CPU执行返回给用户。

    首先当用户键入代码交给Python处理的时候会先进行词法分析,例如用户键入关键字或者当输入关键字有误时,都会被词法分析所触

    发,不正确的代码将不会被执行。

    下一步Python会进行语法分析,例如当"for i in test:"中,test后面的冒号如果被写为其他符号,代码依旧不会被执行。

    下面进入最关键的过程,在执行Python前,Python会生成.pyc文件,这个文件就是字节码,如果我们不小心修改了字节码,Python下次

    重新编译该程序时会和其上次生成的字节码文件进行比较,如果不匹配则会将被修改过的字节码文件进行覆盖,以确保每次编译后字节码

    的准确性。

    那么什么是字节码?字节码在Python虚拟机程序里对应的是PyCodeObject对象。.pyc文件是字节码在磁盘上的表现形式。简单来说就是

    在编译代码的过程中,首先会将代码中的函数、类等对象分类处理,然后生成字节码文件。有了字节码文件,CPU可以直接识别字节码文

    件进行处理,接着Python就可执行了。

    推荐学习《Python教程》!

    展开全文
  • python需要编译

    千次阅读 2021-02-04 17:59:00
    通常的说法,编译代表着将一个高级语言转化 CPU 能执行的机器码。当你编译 C 的时候,的确是做的这样的操作。编译的结果是一个二进制可执行文件,这时你的系统可直接运行这个程序。与此相对的,解释的意思是这...

    c68c41070b168f4083c7fe2d6f749b3d.png

    一个经常听见的问题,那就是:Python是解释型的语言吗?它会被编译吗?这个问题没有想象中那么好回答。和很多人认识世界一样,习惯以一个简单的模型去评判一些事物。而事实上,里面包含了很多很多的细节。

    通常的说法,编译代表着将一个高级语言转化为 CPU 能执行的机器码。当你编译 C 的时候,的确是做的这样的操作。编译的结果是一个二进制可执行文件,这时你的系统可直接运行这个程序。

    与此相对的,解释的意思是这样的:程序运行时每次读源文件中的一行代码,并执行相应的操作,就这样一行一行的重复下去。当然,所谓的脚本语言就是这么运行的。

    但事实上,上面的定义有太多的局限。一门真正的语言,为了拥有更多有用和强大的特性,通常采用了各种各样的实现方式。我们可以将编译理解为更通用一些:将一种语言转化为另一种语言形式。通常来说,源语言比目标语言要更高级一些,比如将 C 转化为机器码。当然,JavaScript 8 到 JavaScript 5 的转化也算是一种编译。

    f8b07afcbd8684c834f50a1a84d72997.png

    在Python中,源代码会被编译为更低级的一种形式,我们称之为字节码。字节码是一串指令,和 CPU 的指令集类似。但是字节码并不直接被 CPU 执行,而是在虚拟机中执行的。当然,这里的虚拟机并不模仿整个操作系统的环境,只是提供了字节码执行的一个环境。

    下面我们看 Python 的一小段代码以及它对应的字节码

    5e8c272e72ae1070303b228ef5367671.png

    看了字节码的内容后,我们就知道 f'...' 这种格式化字符串的形式的运行原理,就是将里面的字符串转化为一系列的字面字符串与变量,然后使用 + 号连接起来。

    dis 是 Python 标准库中反汇编模块,它可以展示 Python 代码的字节码信息。上面提到的执行字节码的虚拟机,可以用任意的语言实现,包括 Python 自己。有兴趣的可以去 GitHub 上看下这个项目 nedbat/byterun 。这个项目可以用来学习,但不适用于生产环境。

    不过,我们运行 Python 时完全感受不到它的编译过程,没有显示的调用什么编译程序,仅仅是简单的执行 .py 文件,编译都是需要时自动编译的。这和 JAVA 不同,当你每次写完 JAVA 代码要执行时,都要手动将其编译为 .class 文件,然后执行。也正是这个原因,JAVA 被称为编译型语言,而 Python 被叫做解释型语言。但事实上,两种语言执行时都会先编译成字节码,然后交给虚拟机执行。

    Python还有一个重要的特性,就是交互式命令行。你可以敲入一行 Python 语句,然后立刻回车执行。实际上,即使是这个过程,Python 同样是先转为字节码,然后执行。而这个交互式命令行这个特性,在很多编译型语言里是没有的。同样因为没有显示的调用编译程序,很多人将执行Python源文件的程序叫做Python解释器。

    即使比较简略,但还是补充下。部分编译型语言比如 C 或者 JAVA 也有交互式命令行,但这些并不是这些语言的重心。JAVA 刚开始是编译成字节码然后执行,后面有了即时编译技术( JIT )可以直接编译成机器码,与 C 类似。

    从上面的描述可以看出,不管是解释还是编译,并没法完全分离开来。很多时候,我们想用一些词将现有的编程语言分个类,但事实上要办到这一点太难了。

    最后要说明的是,你的代码是怎么执行的只是语言的实现问题,并非语言的特征。上文中,我们讨论的是 Python ,但实际上是 CPython 的描述。CPython 是一个解释器,之所以这么叫,是因为这个解释器是用 C 编写的,这也是 Python 默认的解释器。当然还有其它很多解释器,比如,PyPy 就是另一种解释器,使用了 JIT 技术,运行速度相比 CPython 有较大提升。

    回到标题中的问题,Python之所以称为解释型语言,是因为它没有显示的调用编译操作,表现出解释型的特性比较多而已。但事实上,编译是存在的,具体怎么编译就看语言的实现了,也就是解释器的设计。

    更多Python相关技术文章,请访问Python教程栏目进行学习!

    展开全文
  • C++ or Python 这个选择题该怎么做?

    千次阅读 2020-12-08 10:48:21
    而在编程语言的选择上,很容易在C++和Python之间犹豫不决,知道到底该如何选择。先说下我的背景:1.我刚上完自动驾驶Term1的课程,Term1的内容主要是机器视觉和深度学习的内容,里面编程语言是Python;2.而Term2/...

    在这个人工智能和大数据当道的时代,好像不会门编程语言就落后于时代了。

    而在编程语言的选择上,很容易在C++和Python之间犹豫不决,不知道到底该如何选择。

    先说下我的背景:

    1.我刚上完自动驾驶Term1的课程,Term1的内容主要是机器视觉和深度学习的内容,里面编程语言是Python;

    2.而Term2/Term3是主要是关于车辆定位、数据融合、路径规划和车辆控制的内容,里面使用的语言是C++;

    3.国庆期间花了5天时间把C++课程学了一遍,算是刚刚入门吧。

    针对这个问题,我说一下我的浅显的看法,抛砖引玉,说的不好,大家轻拍哈~

    先说下Python和C++两者的差异。

    性质不同

    Python为脚本语言(script language),需要边解释边运行。好处是不需要编译,可以直接运行。坏处是由于边解释边运行,运行效率慢。

    而C++为编译语言(complier language),需要先编译再运行。好处是运行速度快,尤其对于大型程序,效率提升明显。坏处是程序更新后,需要重新编译运行,不是很方便。

    语法不同

    Python语法简单,语句简洁,使用方便,上手容易,而且不需要编译可以即使运行,尤其在Jupyter Notebook上运行,那叫一个得心应手,所以才有“人生苦短,我用Python”之说。

    C++语法复杂,格式要求高,使用不便,上手较难。比如变量在使用前需声明(declaration),更不用提指针/虚函数之类,想想都头大。

    应用场景不同

    Python在人工智能领域占据有压倒性的优势,有众多的库支持,大多数第三方库都是基于Python开发或者提供完整的API。这也是为什么自动驾驶Term1使用Python语言的原因。

    由于运行速度的优势,C++在工业界占有统治性的地位,这也是为什么在自动驾驶Term2/Term3都是用C++语言的原因。

    所以,不用太纠结到底如何选择,可以根据自己的应用场景和使用目的来选择。

    如果只是追求实现功能,对速度要求不高,请选择Python。

    如果需要追求运行效率,还是选择C++。

    如果是人工智能相关的领域,那还是别犹豫了,直接Python吧~

    就酱。

    感谢阅读。

    欢迎大家关注我的知乎专栏和微信公众号:业界良新。

    我做了个思维导图,供大家参考。

    展开全文
  • python编译过程和执行原理(1)python执行原理这里的解释执行是相对于编译执行而言的。我们都知道,使用C/C++之类的编译性语言编写的程序,是需要从源文件转换成计算机使用的机器语言,经过链接器链接之后形成了二...
  • Python编译型语言还是解释型语言?回答这个问题前,应该先弄清楚什么编译型语言,什么是解释型语言。所谓编译执行就是源代码经过编译器编译处理,生成目标机器码,就是机器能直接运行的二进制代码,下次运行时...
  • Python2编译

    千次阅读 2021-12-30 18:41:14
    Python2编译下载文件编译解压安装到指定目录增加ssl模块的支持编译安装错误安装e2fsprogs-devel安装pip 下载文件 直接去官网下载tar.gz的安装包即可,这里下载的是Python-2.7.18.tgz 编译 在root目录新建software...
  • python脚本编译流程

    千次阅读 2022-04-23 19:21:08
    首先python版本选了3.9.12,编译的模块pyinstaller没有支持最新版本3.10 2 添加打包模块 在pycharm中打开setting,添加pyinstaller模块。 3 添加打包工具 同样在File->Setting中选择Tools下的ExternalTools,...
  • Python 防止反编译

    千次阅读 2021-12-24 11:18:40
    写在前面:写这篇文章,第一个是因为公司开发的exe的确也有这个问题,其次呢,也是因为本人对Python也比较有兴趣,在此推写一个解决办法,也希望可以帮助到一些朋友,或者说让一些朋友学习到些什么。 一、问题说明 ...
  • python3交叉编译

    千次阅读 2019-09-06 11:49:14
    有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必可少的KaTeX数学...
  • 编译安装python3.6

    千次阅读 2022-03-26 11:00:41
    1.3 configure 编译且安装( 进入python源码包目录,编译且安装 ) 1.3.1 命令 ./configure --prefix=安装路径 1.3.2 介绍 ./configure --prefix=/opt/python365/ 上面的意思是将该软件安装在 /usr 下面,执.
  • python 把代码编译成pyc文件

    千次阅读 2022-04-25 23:11:11
    所以就需要编译为pyc后,再发布出去。 python提供了内置的类库来实现把py文件编译为pyc文件,这个模块就是py_compile 模块。 将单个python文件转为pyc文件 python -m py_compile code.py 将一个目录中的python文件...
  • 说明:最近刚刚开始接触接口的编写,用的是有关grpc远程调用。我还没太搞明白接口是怎么回事,但我的初步目标可以简单理解...首先介绍一下我查到的编译方法,第一种是使用protoc,第二种是使用python编译;但只有py...
  • python编译工具合集

    热门讨论 2012-03-31 02:10:08
    python编译工具合集
  • Python编译的两种方法

    千次阅读 2020-12-04 12:40:39
    用在线网站反编译; 传送门:bo ki~ 二. 下载插件 步骤 List 1 安装: 安装命令:pip install uncompyle; 反编译命令: uncompile -o . 文件名.pyc 注意有两个. 举个????:uncompile -o . f417c0d03b0344eb9969ed0e1f...
  • Python将py文件编译为exe的方法

    千次阅读 2022-02-15 16:06:46
    使用PyCharm工具写好的Python程序脚本,怎么将.py文件编译为可执行的.exe文件 前提是已经安装了Python环境。 第一步:在PyCharm内下载安装pyinstalle库或使用CMD安装 PyCharm内安装: File->Settings->...
  • Python 执行文件编译为exe或者sh文件

    千次阅读 2020-09-04 09:05:05
    Python 执行文件编译为Windows的exe或者Linux的sh文件,pyinstaller参数介绍,常用的主要是-F、-p、-i、-w这几个参数: -a:包含编码.在支持Unicode的python版本上默认包含所有的编码 -c:使用控制台子系统执行...
  • python文件编译与pyc反编译

    万次阅读 2020-07-10 17:02:41
    当我们发布系统的时候想让别人看到源代码,就需要将py文件编译生成pyc文件,对外只提供pyc文件。同样,如果拿到一个python程序,只有pyc文件,我们就无法看到源码,希望有办法反编译pyc文件以获得源码。 既然有反...
  • python编译安装ssl的问题解决

    万次阅读 2020-11-09 15:51:04
    python编译安装需要ssl模块才能使用pip,且ssl需要支持x509, 如果openssl版本太低,则无法安装ssl对应模块。如果支持ssl,在configure的时候能看到: 以下不需要管理员权限。 解决方案:编译安装openssl最新版: 1...
  • python编译方法

    千次阅读 2019-03-31 02:20:14
    有时为了一些机密,方便公开python源码,所以需要编译方式进行部署。这里主要介绍以.pyc的方式。 1、生成单个文件: (1)python -m xx.py (2)在python编译器中进行: import py_compile py_compile.compile...
  • python】将python 编译为二进制可执行程序 使用 python 的包管理工具 pip 下载pyinstaller step 1 : pip install pyinstall 可能会提示: You are using pip version 10.0.1, however version 20.2.3 is ...
  • Python3源码编译和使用静态链接库lib&动态链接库dll详细介绍
  • 今天群里有朋友问到如何讲python编译为exe文件,刚好有时间,现写了。 PyInstaller 这是官网的说明,好像挺6的! 多方便啊:安装然后就可以编译python程序成为exe可执行文件了。 确认安装好pip 参考 快速安装并...
  • python程序反编译

    万次阅读 2018-09-19 21:05:38
    python2,需要补8个字节,后面的4个字节是时间戳,前面的4个字节是python编译的版本。。 当然这里有个小技巧 前4个字节可以通过struct文件获取 所以前面的是\x03\xf3\x0d\x0a。。后面的时间戳也可以用00...
  • 回答这个问题前,我们先弄清楚什么编译型语言,什么是解释型语言。所谓编译执行就是源代码经过编译器编译处理,生成目标机器码,就是机器能直接运行的二进制代码,下次运行时无需重新编译。不过它是针对特定CPU...
  • 使用cython把python编译so

    千次阅读 2020-12-13 10:23:09
    1.需求为了保证线上代码安全和效率,使用python编写代码,pyc可直接反编译,于是把重要代码编译so文件2.工作2.1 安装相关库:pip install cythonyum install-y gcc python-devel2.2 创建setup.py#!/usr/bin/env ...
  • Python3.7源码包编译安装

    万次阅读 2019-01-29 20:04:05
    七步搞定Python源码包安装
  • Linux/Ubuntu/Centos编译安装Python3.7 懒得折腾的版本

    千次阅读 多人点赞 2022-03-30 14:33:07
    Linux/Ubuntu/Centos编译安装Python3.7 懒得折腾的版本   大家好,我是亓官劼(qí guān jié ),在【亓官劼】公众号、CSDN、GitHub、B站、华为开发者论坛等平台分享一些技术博文,主要包括前端开发、python...
  • python3编译py文件pyc

    千次阅读 2019-04-10 17:02:54
    python3.2以后,使用python3 -m compileall命令编译生成的pyc文件会带着版本号,经处理无法运行,可使用命令: python3 -m compileall -b . 或增加优化项:-O python3 -O -m compileall -b . 来把当前目录下...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 473,924
精华内容 189,569
关键字:

为什么python不需要编译