作为开发者,需要一套开发环境,以便开发和调试程序。
做好的程序,如何在才能被其他人用呢?
为啥之间把代码拷贝过去无法使用呢?
程序的由来
电脑是由很多电子元件组成了,通过高电位和低电位表示两种不同的状态,然后通过大规模集成电路,将上亿的电子原件组合起来,表示更复杂的状态,表达信息。
在发展过程中,不同的厂商有不同的组织标准和实现方案,也就有不同的指挥调度命令。
将电脑上的指令组合起来,就成为了让电脑运行的程序。
程序员就是按照这些指令的规则,编写出能驱动电脑的程序。
可以看出,程序是不许符合某种电脑指令要求的,也就是用的是那种电脑的指令写的程序,就只能在那种电脑上运行。
这显然不符合发展要求,于是人们就提出了统一的编程接口,根据这些接口,设计编程语言,这样不但摆脱了具体电脑类型的束缚,而且还可以设计出更符合人类思维的编程语言。
这个过程就是程序发展的不完整的简要过程。
程序的运行
写好的程序,如何运行起来呢?
因为程序以及不再是机器能之间识别的指令集合,所以需要先对程序进行编译,让器转化为更接近机器运行的代码。
另外,程序中需要用到很多操作系统的功能,比如读取文件,进行网络访问等等,这些功能编写起来不但复杂,而且质量要求很高,不是一般程序员能搞得定的。
于是有一些公司、社区和高级程序员,将对操作系统的调用编写成模块,组件和功能块,同其他程序员使用,这就是常说的库。
当需要调用系统功能时,可以利用相应的库来实现,比如 Python 中打开一个文件的代码是:
1 | file = open("text.txt", 'r', 'utf-8') |
其中 open 就是 Python 中提供的调用操作系统而提高的库方法。
在程序运行之前,还需要编译这些被调用的库,这个过程被称为 链接。
最后,在根据具体的电脑类型,将代码编译成可执行文件,在不同的但类型相同的电脑上,就可以运行了。
python
人生苦短,我用 Python
这是 Python 里一句著名的 Slog,之所以这么说,是因为 Python 里有大量的库,包括官方的和第三方的,从基本处理,到人工智能,应有尽有。
使用这些库,往往几行代码就可以实现复杂的功能,比如提取一个页面内容的代码:
1 | import requests |
引入 requests 库,通过 get 方法,就可以获得一个页面的所有数据,而不用关注复杂的链接建立和处理过程。
随着 Python 社区的蓬勃发展,Python 的库,形成了巨大的规模,不可能在一台电脑上安装所有的库,而应该是用到什么安装什么才对。
实际上也就是这么用的,比如上面代码中用到了 requests 库,它不随 Python 环境一起安装,所以使用之前可以通过下面的命令安装:
1 | pip install requests |
不过问题来了,写代码时安装了一下库,将代码拿到其他机器上跑,其他机器可不一定安装了依赖的库,不就运行不了了吗?
确实是,所以需要开发环境中,安装了什么,就在要运行的环境中安装什么。
为了方便,Python 引入了一个概念,叫 —— 虚拟环境。
虚拟环境
之所以叫虚拟环境,就是相对于实际环境而起名的。
什么是实际环境呢?
当安装好 Python 之后,在命令行中,输入:
1 | python -h |
如果能看到大段的 Python 帮助说明,那么这个环境就是实际环境,其实叫公共环境更好,意思是任何在这个电脑上的 Python 程序都可以使用这个环境。
比如安装了 requests 库,在写一个 Python 程序照样可以用。
如果我们写了很多程序,而每种程序用到不同的库,这些库都被装在实际环境中了,当要迁移程序时,就不能方便的知道要迁移的程序,到底用了哪些库。
等迁移到其他机器上,不是少了库就是多了库。
如果能为每个程序单独创建一个环境就好了。
Python 也想到了这一点,而且提供了简单的创建方法。
创建虚拟环境
1 | python -m venv .env |
这段代码,就在当前目录,创建一个隐藏文件夹 .env
作为虚拟环境。
然后激活虚拟环境:
- windows
1 | .env\Scripts\activate.bat |
或者 powershell 下:
1 | .env\Scripts\Activate.ps1 |
- Linux
1 | souce .env/bin/activate |
激活后,可以正常使用 pip 安装需要的组件。
完成开发打包时,将虚拟环境中的依赖导出,命令是:
1 | pip freeze > requirements.txt |
即,将依赖导出到 requirements.txt 文本文件中。
如何在新环境中安装呢?
将 requirements.txt 和程序一起复制到新环境中,前提是必须安装有 Python。
如有必要,创建一个虚拟环境,激活后,执行:
1 | pip install -r requirements.txt |
就可以安装所以依赖了,然后就可以执行程序了。
总结
程序是为人服务,所以并没有想象中那么神秘和可怕,每一步,每个设计和特性,都是在解决或者优化一个问题。
只要顺着解决问题的思路走下去,就能进入美妙的程序世界,让程序发挥作用提升效率。
今天从程序如何形成,以及如何运行的角度上,简单地梳理了一下,并说明了 Python 程序开发和迁移的方法,期望能对读者进一步理解程序有所帮助,比心!