为什么可以/需要编译

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

什么是源代码、可执行文件

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

C语言的编译程序就是gcc

编译是怎样的一个过程

软件的源代码(文本文档)+ 系统已有的函数库,经过编译器的编译,生成可执行文件

函数库是做什么的?如同 Python 会调用大量外部的模块/库帮助实现一些功能一样,软件也会用到系统的函数完成一些任务,所以需要在编译时写入,以便程序执行时调用。

make 与 configure

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

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

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

Tarball 文件

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

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

Tarball 文件通常包含:

源代码文件

检测程序文件(configure 或 config等)

软件的简单说明 与 安装说明(README 或 INSTALL)

tarball 安装软件的步骤

下载源代码。链接

解压,阅读源码所在目录下的 README/INSTALL。建议解压在/usr/local/src目录下。

./configure '--enable-framework[=DIR]':执行源码所在目录下的 configure,生成 Makefile 文件。可以指定最终可执行文件的安装目录,建议安装在/usr/local/bin/下。

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

make:在目录下运行 make 程序,以寻找 Makefile 文件,根据文件内容进行编译。生成的可执行文件会存放在当前所在目录下。

make install:make 根据 Makefile 文件中 install 的选项,将编译完成的可执行文件安装到指定目录,完成安装。

实测

➜ Python-2.7.9 ./configure

checking build system type... x86_64-apple-darwin14.5.0

checking host system type... x86_64-apple-darwin14.5.0

...

configure: checking for device files

checking for /dev/ptmx... yes

checking for /dev/ptc... no

checking for %lld and %llu printf() format support... yes

checking for %zd printf() format support... yes

checking for socklen_t... yes

checking for build directories... done

checking for ensurepip... no

configure: creating ./config.status

config.status: creating Makefile.pre

config.status: creating Modules/Setup.config

config.status: creating Misc/python.pc

config.status: creating Modules/ld_so_aix

config.status: creating pyconfig.h

creating Modules/Setup

creating Modules/Setup.local

creating Makefile

➜ Python-2.7.9 make

....

Python build finished, but the necessary bits to build these modules were not found:

_bsddb _sqlite3 _ssl

bsddb185 dbm dl

gdbm imageop linuxaudiodev

nis ossaudiodev readline

spwd sunaudiodev zlib

To find the necessary bits, look in setup.py in detect_modules() for the module's name.

running build_scripts

creating build/scripts-2.7

copying and adjusting /Users/chao/Downloads/Python-2.7.9/Tools/scripts/pydoc -> build/scripts-2.7

copying and adjusting /Users/chao/Downloads/Python-2.7.9/Tools/scripts/idle -> build/scripts-2.7

copying and adjusting /Users/chao/Downloads/Python-2.7.9/Tools/scripts/2to3 -> build/scripts-2.7

copying and adjusting /Users/chao/Downloads/Python-2.7.9/Lib/smtpd.py -> build/scripts-2.7

changing mode of build/scripts-2.7/pydoc from 644 to 755

changing mode of build/scripts-2.7/idle from 644 to 755

changing mode of build/scripts-2.7/2to3 from 644 to 755

changing mode of build/scripts-2.7/smtpd.py from 644 to 755

/usr/bin/install -c -m 644 ./Tools/gdb/libpython.py python.exe-gdb.py

setup.py

missing.append

卸载软件

删除安装目录

rm -rf /usr/local/bin/xxx

参考资料

《鸟哥的linux私房菜》第22章 软件安装:源码与Tarball

python源代码不需要编译成什么-编译 Python 源代码相关推荐

  1. python源代码不需要编译成什么-关于python代码是编译执行还是解释执行

    Python 是编译型语言还是解释型语言?回答这个问题前,应该先弄清楚什么是编译型语言,什么是解释型语言. 所谓编译执行就是源代码经过编译器编译处理,生成目标机器码,就是机器能直接运行的二进制代码,下 ...

  2. python抓取数据库数据封装成json_用Python将mysql数据导出成json的方法

    1.相关说明 此脚本可以将Mysql的数据导出成Json格式,导出的内容可以进行select查询确定. 数据传入参数有:dbConfigName, selectSql, jsonPath, fileN ...

  3. python批量将excel转成pdf_使用Python转换PDF,Word/Excel/PPT/md/HTML都能转!

    同一个操作执行两次,就要考虑自动化! 大家好,又到了Python办公自动化专题. 今天讲的是各位一定会接触到的PDF转换,关于各种格式的文件转换为PDF有很多第三方工具与网站可以实现,但是使用Pyth ...

  4. python读取nc文件转成img_使用python的netCDF4库读取.nc文件 和 创建.nc文件[转]

    使用python netCDF4库读取.nc文件 和 创建.nc文件 1. 介绍 .nc(network Common Data Format)文件是气象上常用的数据格式,python上读取.nc使用 ...

  5. python制作日历并保存成excel_利用Python自动化生成逼格高的日历!简单又实用

    本次内容有感于<Python编程快速上手-让繁琐工作自动化>. 根据书中的「处理Excel电子表格」章节内容,做出一份专属日历. 使用的模块为openpyxl,一个能读取和修改Excel电 ...

  6. python的py文件打包成exe_将python项目.py文件打包成.exe文件

    安装pyinstaller包 pip3 install pyinstaller 如果不行 pip3 install pyinstaller -i https://pypi.doubanio.com/s ...

  7. 将DEX反编译成Java源代码

    本文翻译自:decompiling DEX into Java sourcecode 如何将Android DEX(VM字节码)文件反编译成相应的Java源代码? #1楼 参考:https://sta ...

  8. python编译成c代码_python如何调用c编译好可执行程序

    以下总结出几种在Python 中调用 C/C++ 代码的方法 -------------------------------------------------------------------- ...

  9. Python编译成.so文件后调用

    1. 环境准备 思路是先将py转换为c代码,然后编译c为so文件,所以要安装以下内容: pip install cython sudo apt-get install python-devel sud ...

最新文章

  1. PS滤镜制作下雨照片特效
  2. 在ABAP/4中声明表格控制
  3. 接下来学习计划2020.11.9
  4. 中文版开源!最最最经典的Python编程教材强势来袭~
  5. 程序员的进化(目前还看不懂)
  6. 二维数组及以上维度的数组,本质是一维数组?(C语言)
  7. android 过滤ip,EditText Android过滤器的IP地址###。###。###。###?
  8. 视觉感知「挑战」天花板,多摄像头环绕方案同比增长近100%
  9. 工资条EXCEL短信怎么发送?
  10. 程序员爱穿格子衫、秃头的刻板印象是如何形成的?
  11. MATLAB车牌识别原理[大白话]
  12. 京东秒杀技巧有哪些(京东秒杀技巧大全)
  13. 基于主定理以及递推树求解递归算法的时间复杂度
  14. w10服务器优化,Win10专业版怎么优化最流畅?Win10最详细优化设置告别卡顿!
  15. 笔记本计算机无线开关在哪里,笔记本的WIFI开关在哪里 笔记本WIFI打开方法
  16. 牛客网数据库8:获取员工其当前的薪水比其manager当前薪水还高的相关信息
  17. HTML5期末大作业:全屏页面滚动漫画风格个人主页网站设计 (HTML+CSS)
  18. bootstrap基础和部份组件 -- (笔记一)
  19. SonarQube:开源的代码质量管理工具
  20. 一个能生成精美代码图片的工具Carbon

热门文章

  1. scala的多种集合的使用(8)之队列和栈的操作方法
  2. (转)jQuery选择器总结
  3. codeforces 667A A. Pouring Rain(水题)
  4. 线程与线程池,实例比较。
  5. 编写MOSS自定义字段类型的小意外
  6. ASP.NET MVC Music Store教程(1):概述和新项目
  7. php怎么写获取手机剪切板到搜索栏,如何根据指定的剪切板获取html?
  8. canal能监控多个mysql_learning-mysql-canal
  9. python序列类型-python-序列类型
  10. arcgis python规划地类-作为规划师,为什么我建议你学Python数据分析?