咨询时间:9:00~21:00 400-059-6872

    您的位置: 主页 > 内容中心 > 行业资讯>python如何编译

    python如何编译

    导读:有时候,需要对python程序项目进行打包,即仅打包python文件编译后的pyc文件,就需要对python文件进行编译。那么python如何编译呢?一起来了解下吧: python如何编译 编译方法有两种 :

    有时候,需要对python程序项目进行打包,即仅打包python文件编译后的pyc文件,就需要对python文件进行编译。那么python如何编译呢?一起来了解下吧:

    python如何编译

    python如何编译

    编译方法有两种:

    1、写一个python简本,对所需编译的文件进行编译。(针对比较多的文件,推荐该方法)比如:

    import py_compile<br />

    py_compile.compile("test.py")

    2、直接使用python命令(若使用脚本进行打包,而且文件少,可使用该方法)。例子如下:

    python -mpy_compile test.py

    怎么编译Python源代码

    通常在 Windows 下安装软件,只需要下载可执行文件,一直下一步就可以完成安装。而 Linux 下,你可以获取软件的源代码,自行编译生成可执行文件进行安装。用源代码有什么好处呢?你可以根据自己的需要对软件进行修改,甚至提前修补 已经发现但厂商没有更新 的漏洞。这也就是开源的好处。

    源代码就是用编程语言编写好的程序,其实就是文本文件,可以通过文本编辑器进行编辑。而可执行文件是操作系统认识的二进制程序。要想将源代码变成可执行文件,就需要对源代码进行编译。

    C语言的编译程序就是gcc

    软件的源代码(文本文档)+ 系统已有的函数库,经过编译器的编译,生成可执行文件 函数库是做什么的?如同 Python 会调用大量外部的模块/库帮助实现一些功能一样,软件也会用到系统的函数完成一些任务,所以需要在编译时写入,以便程序执行时调用。

    一个软件往往不仅有一个源代码文件,如果手动对每一个源文件进行编译,太累了,好在有一个非常有用的工具make,可以自动完成编译的过程。那么,make根据什么进行编译呢?他会在当前目录下搜索 Makefile/makefile 文件,这个文件中提供了所需的所有内容。但这个文件并不是生来就有、一成不变的。

    由于各种 Linux 系统内部环境不同,软件开发者会编写一个自动检测环境是否符合要求,为每种环境生成特定 Makefile/makefile 文件的程序,就是configure。

    值得一提的是,当源代码修改后重新编译时,make 能够识别变动的部分,进行增量更新。

    源代码是纯文本文件,如果软件开发者直接提供这些纯文本文件,会浪费开发者的带宽,也使得用户不易下载。

    所以,出现了 Tarball 文件,就是将软件的所有源代码先以 tar 打包,然后用压缩技术压缩,通常使用 gzip,所以一般扩展名是*.tar.gz或*.tgz。不过后来出现了压缩效率更高的 bzip2,所以扩展名也会有*.tar.bz2之类。

    Tarball 文件通常包含:

    ./configure --enable-framework=/Users/ronald/Library/Frameworks

    setup.py missing.append

    删除安装目录 rm -rf /usr/local/bin/xxx

    64位系统如何编译Python

    如果在64位系统下默认执行./configure编译python会使用32位的动态库,当安装mod_wsgi或者mod_python时会出错,这时候需要重新编译python来解决此问题。

    下载python源码。比如2.6.5或2.6.6。

    解压后configure:

    ./configure --prefix=/usr/local --with-threads --enable-shared --enable-universalsdk

    --prefix选项表示把目标编译到/usr/local这个目录中。

    注意:

    64位系统如何编译Python

    a. 如果只用./configure命令,那默认会编译出静态的.a以及32位的动态库。 b. 最后一个选项非常重要。如果这个选项不加,那只会编译出32位的库。

    3. make &&make install

    这时执行python,很有可能会报一个错:

    libpython2.6.so.1.0:

    cannotopen shared object file: No such file or directory

    这是因为编译的libpython2.6.so.1.0是在/usr/local/python2.6/lib里面,可以做一个到/usr/lib64的软链接,或者直接把它复制过去就行了。

    或者也可以这样:

    echo‘/usr/local/python2.6/lib’ > /etc/ld.so.conf.d/opt-python2.6.conf

    接着执行

    ldconfig

    最后可以通过以下命令验证是否存在64位的libpython:

    ldconfig–p | grep python

    看有没有类似“libpython2.6.so.1.0(libc6,x86-64) => /usr/local/python2.6/lib/libpython2.6.so.1.0”的输出。

    python文件如何编译

    编译 .py 文件有以下几种方式,所有这些方式都是使用了 py_compile 模块的 compile() 方法。同时我们可以使用 compileall 模块中的 compile_dir() 来编译某个文件夹下面所有的 .py 文件,以及可以使用 compile_path 来依次编译 sys.path 指定路径下的 .py 文件。如果看过 compileall 模块的源码我们可以知道 compileall 编译 .py 文件其实还是调用了 py_compile 的 compile() 方法。

      在Linux环境下,可以通过写一个bash脚本编译 .py 文件,也可以直接通过命令行来编译。(这里仅介绍通过命令行来编译的方法):

    1. 生成单个的 .pyc or .pyo 文件

    1 # 编译成pyc文件

    2 # ------------------------------------------------------

    3 python -m py_compile $filename # 其中,$filename是要编译的python源码文件名

    4

    5

    6 # 编译成pyo文件

    7 # -------------------------------------------------------

    8 python -O -m py_compile $filename

    9 # 或者

    10 python -OO -m py_compile $filename

    11

    12 # 其中, + -O选项表示优化产生的字节码,优化程度由PYTHONOPTIMIZE(environment)的值来决定。 + -OO选项表示在-O优化的基础上移除所有的doc-strings(文档文本)。

    2. 批量生成 .pyc 文件

      使用compileall模块可以批量编译整个目录下的Python源码文件。

    1 # 函数定义

    2 compileall.compile_dir(dir, maxlevels=10, ddir=None, force=False, rx=None, quiet=False, legacy=False, optimize=-1)

    3 # 用法:

    4 python -m compileall $dir

    或者可以编写脚本来实现:

    1 import compileall

    2 compileall.compile_dir('$dir')

    3# 其中,$dir 为Python源代码所在的目录。

     

    免责声明:本文素材取自公开网络资料,经我方编辑重新梳理与加工,文中观点仅供参考,不代表小码王官方立场。本文标题:python如何编译,本文链接:https://www.xiaomawang.cn/info/68231.html;欢迎转载,转载请说明出处。若您认为本文侵犯了您的合法权益,或您发现该内容有任何涉及有违公德、触犯法律等违法信息,请您立即通过邮件(邮箱号:hzlixy@xiaoma.cn)联系我们及时修正或删除。
    回到顶部
    弹出表单占位框
    免费领取小码王少儿AI编程体验课