Python系列(1)- Python 简介、环境配置、开发/管理工具、Python 虚拟环境


Python 是荷兰人 Guido van Rossum(吉多·范罗苏姆,中国程序员称其为 “龟叔”)在 1990 年初开发的一种解释型编程语言。Python 源代码遵循 GPL(GNU General Public License)协议,现在 Python 是由一个核心开发团队在维护,Guido van Rossum 仍然占据着至关重要的作用,指导其进展。

Python 的诞生是极具戏曲性的,据 Guido 自述记载,Python 语言是在圣诞节期间为了打发无聊的时间而开发的,之所以会选择 Python 作为该编程语言的名字,是因为 Guido 是 Monty Python 戏剧团的忠实粉丝。

Python 语言是在 ABC 语言的基础上发展而来,其设计的初衷是成为 ABC 语言的替代品。ABC 语言虽然是一款功能强大的高级语言,遗憾的是,由于 ABC 语言不开放的原因,导致它没有得到普及应用。基于这个考虑,Guido 在开发 Python 之初就决定将其开源。

Python 中不仅添加了许多 ABC 语言没有的功能,同时,还为其设计了各种丰富而强大的库,利用这些 Python 库,程序员可以把使用其它语言制作的各类模块(尤其是 C 语言和 C++)很轻松地“黏连”在一起,因此 Python 又常被称为 “胶水” 语言。

注:这里所说的库和模块,简单地理解就是一个个的源文件,每个文件中都包含可实现各种功能的方法(也可称为函数)。


1. Python 简介

    Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。

    Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构。

    Python 是一种解释型语言:这意味着开发过程中没有了编译这个环节。类似于 PHP 和 Perl 语言。
    Python 是交互式语言:这意味着,您可以在一个 Python 提示符 >>> 后直接执行代码。
    Python 是面向对象语言: 这意味着 Python 支持面向对象的风格或代码封装在对象的编程技术。
    Python 是初学者的语言:Python 对初级程序员而言,是一种伟大的语言,它支持广泛的应用程序开发,从简单的文字处理到 WWW 浏览器再到游戏。

    Python 发展历史:

        (1) Python 是由 Guido van Rossum 在八十年代末和九十年代初,在荷兰国家数学和计算机科学研究所设计出来的。
        (2) Python 2.0 于 2000 年 10 月 16 日发布,增加了实现完整的垃圾回收,并且支持 Unicode。
        (3) Python 3.0 于 2008 年 12 月 3 日发布,此版不完全兼容之前的 Python 源代码。不过,很多新特性后来也被移植到旧的 Python 2.6/2.7 版本。
        (4) Python 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。Python 2.7 被确定为最后一个 Python 2.x 版本,它除了支持 Python 2.x 语法外,还支持部分 Python 3.1 语法。

    Python 特点:

        (1) 易于学习:Python 有相对较少的关键字,结构简单,和一个明确定义的语法,学习起来更加简单。
        (2) 易于阅读:Python 代码定义的更清晰。
        (3) 易于维护:Python 的成功在于它的源代码是相当容易维护的。
        (4) 一个广泛的标准库:Python 的最大的优势之一是丰富的库,跨平台的,在 UNIX,Windows 和Macintosh 兼容很好。
        (5) 互动模式:互动模式的支持,您可以从终端输入执行代码并获得结果的语言,互动的测试和调试代码片断。
        (6) 可移植:基于其开放源代码的特性,Python 已经被移植(也就是使其工作)到许多平台。
        (7) 可扩展:如果你需要一段运行很快的关键代码,或者是想要编写一些不愿开放的算法,你可以使用 C/C++ 完成那部分程序,然后从你的 Python 程序中调用。
        (8) 数据库:Python 提供所有主要的商业数据库的接口。
        (9) GUI 编程:Python 支持 GUI 可以创建和移植到许多系统调用。
        (10) 可嵌入: 可以将 Python 嵌入到 C/C++ 程序,让你的程序的用户获得 "脚本化" 的能力。


2. Python 环境配置

    Python 可应用于多种平台包括 Windows、Linux 和 Mac OS X 等,这里重点关注 Windows 和 Linux 环境下的配置。

    Python 官网:https://www.python.org/
    Python 文档地址:https://www.python.org/doc/

    1) Windows 下安装 Python

        在 Windows 上安装 Python 和安装普通软件一样简单,下载地址: https://www.python.org/downloads/windows/ 。
        
        Python 有两个版本的 Python,分别是 Python 3.x 和 Python 2.x,建议初学者直接使用 Python 3.x,本文以 3.8.1 的文件下载列表为例:

            Python 3.8.1 - Dec. 18, 2019
            Note that Python 3.8.1 cannot be used on Windows XP or earlier.

            Download Windows help file
            Download Windows x86-64 embeddable zip file
            Download Windows x86-64 executable installer
            Download Windows x86-64 web-based installer
            Download Windows x86 embeddable zip file
            Download Windows x86 executable installer
            Download Windows x86 web-based installer

        前缀说明:
            
            以 Windows x86-64 开头的是 64 位的 Python 安装程序;
            以 Windows x86 开头的是 32 位的 Python 安装程序;

        后缀说明:

            embeddable zip file 表示 .zip 格式的绿色免安装版本,可以直接嵌入(集成)到其它的应用程序中;
            executable installer 表示 .exe 格式的可执行程序,这是完整的离线安装包,一般选择这个即可;
            web-based installer 表示通过网络安装的,也就是说下载到的是一个安装工具,安装过程中还需要联网下载真正的 Python 安装包。

        本文选择的是 “Windows x86-64 executable installer”,也即 64 位的完整的离线安装包。

        请尽量勾选 Add Python 3.8 to PATH,这样可以将 Python 命令工具所在目录添加到系统 Path 环境变量中,便于命令行运行 Python 命令。

        Python 支持两种安装方式,默认安装和自定义安装:

            默认安装会勾选所有组件,并安装在 C 盘;
            自定义安装可以手动选择要安装的组件,并安装到其它盘符。

        初学者建议选择默认安装。

    2) Linux 下安装 Python

        绝大多数的 Linux 发行版(Ubuntu、CentOS 等)都默认自带了 Python。有的 Linux 发行版甚至还会自带两个版本的 Python(Python 2.x 和 Python 3.x)。

        打开 Linux 终端(Terminal),输入 python 命令就可以检测是否安装了 Python,以及安装了哪个版本,如下所示:

            $ python -V

                Python 2.7.5

            注:当前的 Linux 发行版已经自带了 Python 2.7.5。

        大部分的 Linux 发行版会自带 Python 2.x,检测当前 Linux 发行版是否安装了 Python 3.x,可以在终端(Terminal)输入 python3 命令,如下所示:

            $ python3 -V

                -bash: python3: command not found

            注:当前的 Linux 发行版没有带 Python 3.x。如果需要使用 Python 3 (或现有 Python 3 版本不够新),那么就需要更新 Python 版本,这里以 Ubuntu 为例。

        (1) 更新 Python 版本

            在 Ubuntu 终端执行以下两条命令即可更新 Python 版本:

                $ sudo apt-get update
                $ sudo apt-get install python3.8

            命令说明:

                第一条命令用来指定更新 /etc/apt/sources.list 和 /etc/apt/sources.list.d 所列出的源地址,这样能够保证获得最新的安装包。
                第二条命令用来指定安装 Python 3.8,这是目前最新的 Python 版本。

            等待以上两条命令执行完成,再次在终端输入 python3 -V 命令,查看 Python 3.x 版本。

        (2) 下载 Python 源码安装

            在 apt-get 安装方式不作用时,可以尝试下载源代码,自己编译安装,当然,对 Linux 系统不熟悉的初学者要谨慎操作。

            从 Python 官方(https://www.python.org/downloads/)下载页面,选择指定版本的 “Gzipped source tarball” 源码压缩包 (.tgz 格式) 的地址。

            运行如下命令:

                $ wget https://www.python.org/ftp/python/3.8.1/Python-3.8.1.tgz
                $ tar -zxvf Python-3.8.1.tgz
           
            进入 tar 解开的目录,使用 make 工具进行编译:

                $ ./configure  --prefix=/usr/local
                $ make && sudo make install

            这里的 --prefix=/usr/local 用于指定安装目录(建议指定)。如果不指定,就会使用默认的安装目录。

            在终端输入 python3 -V 命令,查看 Python 3.x 版本。

    3) Docker 部署 Python

        参考 “Docker基础知识 (6) - 使用 Docker 部署常用的应用程序”  的 “8. 部署 Python”。


3. Python 开发工具

    IDE 是 Integrated Development Environment 的缩写,中文称为集成开发环境,用来表示辅助程序员开发的应用软件,是它们的一个总称。

    用 Python 语言进行程序开发,既可以用 Python 自带的 IDLE,也可以使用 PyCharm 或 Eclipse+PyDev 等作为 IDE。

    1) PyCharm

        PyCharm 由 JetBrains 公司开发的一款 Python 开发工具,在 Windows、Mac OS 和 Linux 操作系统中都可以使用。

        PyCharm 具有语法高亮显示、Project(项目)管理代码跳转、智能提示、自动完成、调试、单元测试以及版本控制等一般开发工具都具有的功能,除此之外,它还支持 Django(Python 的 Web 开发框架)框架下进行 Web 开发。
        
        PyCharm 开发工具可通过其官方网站下载获取。需要注意的是,该网站提供了 2 个版本,一个是社区版(免费并且提供源代码,适合多数读者),另一个是专业版(免费试用)。

        PyCharm 官网:http://www.jetbrains.com/pycharm/

    2) Eclipse + PyDev

        Eclipse 是一个开源的、基于 Java 的可扩展开发平台,最初主要用于 Java 语言的开发。该平台可通过安装不同的插件,进行不同语言的开发。

        PyDev 是一款功能强大的 Eclipse 插件,它可以提供语法高亮、语法分析、语法错误提示,以及大纲视图显示导入的类、库和函数、源代码内部的超链接、运行和调试等功能。

        除此之外,还有 PythonWin(只针对 Win32 平台)、MacPython IDE(PythonWin 对应的 Mac 版本)、Emacs 和 Vim(功能强大的文本编辑器,可以用来编写 Python 程序)等,都可以作为执行 Python 程序的 IDE。

        Eclipse+PyDev 的安装要比 PyCharm 复杂,大致分为以下 3 个步骤:
            
            (1) 安装 JRE(Java 运行环境)或 JDK(Java 开发工具包),Eclipse 是基于 Java 的开发工具,必须有 Java 运行环境才能运行;
            (2) 下载和安装 Eclipse;
            (3) 安装 PyDev 插件,运行 Eclipse 后,在菜单 “Help->Install New Software”,在对话框的 Location 文本框中,输出 PyDev 插件的下载地址(http://pydev.org/updates)。

            JDK: https://www.oracle.com/java/technologies/downloads/
            Eclipse: https://www.eclipse.org/downloads/

        PyDev 插件安装成功后,还需要设置 Python 解释器,具体步骤为:

            (1) 打开 Eclipse,选择菜单 “Window -> Preferences”,弹回设置对话框;
            (2) 选择 “PyDev -> Interpreters -> Python Interpreter”,这里可以通过点击 "Config first in PATH" 按钮,通过在 Path 路径中找到 Python 解释器,也可以点击 “Browse for Python/pypy exe” 按钮,手动找到 Python 解释器。添加完成后,点击 “Apply and Close” 按钮即可。

    3) Visual Studio Code

        Visual Studio Code,简称 VS Code,是微软公司开发的一款轻量级 IDE。和 PyCharm 一样,它也支持在 Windows、Linux 和 macOS 平台上运行。

        VS Code:https://code.visualstudio.com/Download

        VS Code 支持几乎所有主流开发语言的语法高亮、智能代码补全、自定义热键、括号匹配等功能,支持使用插件进行功能扩展,还针对网页开发和云端应用开发做了优化。

        值得一提的是,使用 VS Code 编写 Python 代码,无需向其它编译器那样,通过创建项目来管理源代码文件,在 VS Code 中可以直接创建 Python 源代码文件。

        VS Code 安装 Python 扩展的方法:

            (1) 在 Welcome 界面中选择 "Python",下方会弹出一个对话框,选择 "OK",即可完成 Python 扩展的安装;
            (2) 点击 “扩展” 按钮,并搜索 Python 扩展插件,找到合适的扩展(这里选择的是第一个,这是 Python 的调试工具),选择 “Install” 即可安装成功。

    4)Sublime Text

        Sublime Text 是一款流行的文本编辑器,它体积小、运行速度快、文本功能强大、可以运行在 Windows、Linux 和 Mac OS X 平台上。

        在程序员眼里,Sublime Text 还是一款非常好用的代码编辑器,它支持运行 C/C++、Python、Java 等多种语言编写的程序。

        Sublime Text: https://www.sublimetext.com/


4. Pip 管理工具

    pip 是 Python 包管理工具,该工具提供了对 Python 包的查找、下载、安装、卸载的功能。第三方包也可以在 https://pypi.org/ 中查找。

    Python 2.7.9 + 或 Python 3.4+ 以上版本都自带 pip 工具。本文使用 Windows 10 下的 Python 3.8.5 演示 pip 命令的使用方式。

        C:\> pip --version

            pip 24.2 from c:\users\admin\appdata\local\programs\python\python38\lib\site-packages\pip (python 3.8)

    可以使用如下命令,指定 pip 版本:
    
        C:\> python -m pip install --force-reinstall pip==19.1
   

    1) 配置 pip 源

           下载安装 python 第三方库会较慢,所以需要设置 pip 源以便快速下载,常用的国内源如下。

            阿里云                http://mirrors.aliyun.com/pypi/simple/
            中国科技大学         https://pypi.mirrors.ustc.edu.cn/simple/
            清华大学             https://pypi.tuna.tsinghua.edu.cn/simple/
            中国科学技术大学     http://pypi.mirrors.ustc.edu.cn/simple/

        命令行中使用,以 numpy 为例,在后面加 -i 源链接。

            pip install numpy -i http://mirrors.aliyun.com/pypi/simple/
    
        在 C:\Users\tkuang\AppData\Roaming\pip 目录下创建 pip.ini,内容如下。

            [global]
            index-url = https://mirrors.aliyun.com/pypi/simple/
                    
            [install]
            trusted-host=mirrors.aliyun.com

            注:Linux/Mac OS 环境中,配置文件位置在 ~/.pip/pip.conf(如果不存在创建该目录和文件)

        使用 pip config list 命令查看:

            C:\> pip config list

                global.index-url='https://mirrors.aliyun.com/pypi/simple/'
                install.trusted-host='mirrors.aliyun.com'

    2) pip 命令

        # 查看本地已安装的包
        C:\> pip list

            Package             Version
            ------------------- -----------
            bcrypt              4.1.3
            beautifulsoup4      4.12.3
            certifi             2024.2.2
            cffi                1.16.0
            charset-normalizer  3.3.2
            contourpy           1.1.1
            cryptography        42.0.7
            cycler              0.12.1
            distlib             0.3.8

            ...


        # 安装包,但是包已经存在
        C:\> pip install numpy

            Looking in indexes: https://mirrors.aliyun.com/pypi/simple/
            Requirement already satisfied: numpy in c:\applications\python-3.8.1\lib\site-packages (1.23.3)

        # 卸载包
        C:\> pip uninstall numpy     

            Found existing installation: numpy 1.23.3
            Uninstalling numpy-1.23.3:
            Would remove:
                c:\applications\python-3.8.1\lib\site-packages\numpy-1.23.3.dist-info\*
                c:\applications\python-3.8.1\lib\site-packages\numpy\*
                c:\applications\python-3.8.1\scripts\f2py.exe
            Proceed (Y/n)? y
            Successfully uninstalled numpy-1.23.3


        # 查看包的可安装版本
        C:\> pip install requests==

            Looking in indexes: https://mirrors.aliyun.com/pypi/simple/
            ERROR: Could not find a version that satisfies the requirement requests== (from versions: 0.2.0, 0.2.1, 0.2.2, 0.2.3, 
             0.2.4, 0.3.0, 0.3.1, 0.3.2, 0.3.3, 0.3.4, 0.4.0, 0.4.1, 0.5.0, 0.5.1, 0.6.0, 0.6.1, 0.6.2, 0.6.3, 0.6.4, 0.6.5, 0.6.6, 
             0.7.0, 0.7.1, 0.7.2, 0.7.3, 0.7.4, 0.7.5, 0.7.6, 0.8.0, 0.8.1, 0.8.2, 0.8.3, 0.8.4, 0.8.5, 0.8.6, 0.8.7, 0.8.8, 0.8.9, 
             0.9.0, 0.9.1, 0.9.2, 0.9.3, 0.10.0, 0.10.1, 0.10.2, 0.10.3, 0.10.4, 0.10.6, 0.10.7, 0.10.8, 0.11.1, 0.11.2, 0.12.0, 
             0.12.1, 0.13.0, 0.13.1, 0.13.2, 0.13.3, 0.13.4, 0.13.5, 0.13.6, 0.13.7, 0.13.8, 0.13.9, 0.14.0, 0.14.1, 0.14.2, 1.0.0, 
             1.0.1, 1.0.2, 1.0.3, 1.0.4, 1.1.0, 1.2.0, 1.2.1, 1.2.2, 1.2.3, 2.0.0, 2.0.1, 2.1.0, 2.2.0, 2.2.1, 2.3.0, 2.4.0, 2.4.1, 
             2.4.2, 2.4.3, 2.5.0, 2.5.1, 2.5.2, 2.5.3, 2.6.0, 2.6.1, 2.6.2, 2.7.0, 2.8.0, 2.8.1, 2.9.0, 2.9.1, 2.9.2, 2.10.0, 2.11.0, 
             2.11.1, 2.12.0, 2.12.1, 2.12.2, 2.12.3, 2.12.4, 2.12.5, 2.13.0, 2.14.0, 2.14.1, 2.14.2, 2.15.1, 2.16.0, 2.16.1, 2.16.2, 
             2.16.3, 2.16.4, 2.16.5, 2.17.0, 2.17.1, 2.17.2, 2.17.3, 2.18.0, 2.18.1, 2.18.2, 2.18.3, 2.18.4, 2.19.0, 2.19.1, 2.20.0, 
             2.20.1, 2.21.0, 2.22.0, 2.23.0, 2.24.0, 2.25.0, 2.25.1, 2.26.0, 2.27.0, 2.27.1, 2.28.0, 2.28.1)
            ERROR: No matching distribution found for requests==

 

5. Python 虚拟环境

    1) Python 环境

        在搞清楚什么是 Python 虚拟环境,首先要清楚 Python 环境指的是什么。Python 环境主要包括以下内容:

            (1) 解释器 python.exe

                C:\Users\admin> python
                Python 3.8.5 (tags/v3.8.5:580fbb0, Jul 20 2020, 15:57:54) [MSC v.1924 64 bit (AMD64)] on win32
                Type "help", "copyright", "credits" or "license" for more information.
                >>>
                
                注:在 Windows 的命令行窗口内,运行 python 命令 进入 Python 交互模式,可以在 >>> 符后输入 Python 代码交互运行。


            (2) Lib 目录

                > 标准库
                > site-pakages目录,默认安装第三方库所在的目录

            (3) Scripts目录,包含一些执行文件
        
                包管理工具 pip.exe
                打包工具 pyinstaller.exe(需要自己安装)
                ...
        
            (4) 其它     
            
                主要包括 Python 解释器运行时需要的相关依赖文件,文档说明等

        Python 环境主要由运行 Python 解释器和它所处的环境决定。

    2) 什么是 Python 虚拟环境

        搞清楚了什么是 Python 环境,思考下为什么有 Python 虚拟环境的说法。思考以下问题:

            (1) 有两个项目 A 和 B,如果 A 和 B 都要用到某一模块,但版本不相同怎么办?
            (2) 在使用 Pip 安装包时,比如安装 C 包,C 包如果依赖 D 包,Pip 会自动安装 D 包。但当我们用 Pip 移除 C 包时,却只移除了 C 包,不会移除 D 包。此时 D 包变成了无主或无用的包(浪费电脑存储空间)。

        为了解决上面的问题,Python 使用了虚拟环境这个概念,可以认为是 Python 环境的多个副本,只是在不同的副本中安装了不同的包。虚拟环境中一般不包含标准库,不包含 Python 解释器运行时所需的依赖文件。

        当然,管理虚拟环境离不开虚拟环境管理工具,下面列出了一些常用的工具:

            (1) virtualenv

                virtualenv 是非常流行的 Python 虚拟环境配置工具。它不仅同时支持 Python2 和 Python3,而且可以为每个虚拟环境指定 Python 解释器,并选择不继承基础版本的包。virtualenv 能够很好的完成虚拟环境的搭建和 Python 版本的管理,但是跨平台的使用不太一致,且有时候处理包之间的依赖经常存在问题。

            (2) venv

                Python 从 3.3 版本开始,自带了一个虚拟环境模块 venv,关于该模块的详细介绍,可参考 PEP-405。它的很多操作都和 virtualenv 类似。如果你使用的是 Python3.3 之前版本或者是 Python2,则不能使用该功能,依赖需要利用 virtualenv 进行虚拟环境管理

            (3) pipenv

                pipenv 是 Kenneth Reitz (requests 的作者) 的作品。它结合了 Pipfile,pip 和 virtualenv,能够有效管理 Python 多个环境,各种包。Pipfile 是社区拟定的依赖管理文件,用于替代过于简陋的 requirements.txt 文件。Pipfile 文件是 TOML 格式而不是 requirements.txt 这样的纯文本。pipenv 相当于 virtualenv 和 pip 的合体,且功能更多。

            (4) conda

                支持 Python、R、Java、JavaScript、C 等多种开发语言的包、依赖和环境管理工具,能运行在 Windows、MacOS、Linux 多个平台,可以在本地轻松创建、保存、切换环境。当安装 anaconda 时,会自动安装 conda 工具。

                conda 与 pipenv、venv 的区别:conda 虚拟环境是独立于操作系统 Python 环境的,即无论操作系统下 Python 是什么版本(哪怕2.7),也可以指定虚拟环境 Python 版本为 3.6,而 venv 和 pipenv 是依赖操作系统 Python 环境的。

            (5) Python Launcher for Windows

                Python 从 3.3 版本开始,在 Windows 系统中自带了一个 py.exe 启动工具。如果你是使用 Python.org 官网下载的安装包安装的 Python 3.3(或更新版本)环境,那么可以直接在命令提示符中使用这个工具( 在 Windows中,py.exe 会安装在 C:\Windows 目录)。
 py 可以打开默认的 Python 提示符; py -2.7 和 py -3 打开对应的 Python 版本,py -0 将列出系统中安装了哪些版本的 Python。

            注:pipenv 是依赖操作系统 Python 环境的, 使用 pipenv 时如果要支持多个 Python 版本的虚拟环境,我们可以使用 pyenv 或 asdf 等 Python 版本管理工具。pyenv‌ 主要针对 Python 版本管理,是一个专门用于管理Python版本的工具。asdf‌ 是一个更通用的版本管理工具,支持管理多种编程语言的版本,包括 Node.js、Ruby、Elixir、Erlang 等。

 

    3) pipenv

        本文以 Windows 环境为例,介绍如何安装 pipenv 和 pipenv 的一些基本的使用方法。当前 Windows 环境,只安装了一个 Python 版本 3.8.5,pipenv 只能创建基于 Python 3.8 的虚拟环境。

        (1) 安装 pipenv

            可以使用如下命令安装 pipenv:

                C:\> pip install pipenv

                    ...

                C:\> pipenv --version

                    pipenv, version 2024.0.1

                C:\> pipenv -h

                    Usage: pipenv [OPTIONS] COMMAND [ARGS]...

                    Options:
                    --where                         Output project home information.
                    --venv                          Output virtualenv information.
                    --py                            Output Python interpreter information.

                    ...
    

        
        (2) 创建虚拟环境

            新建 C:\pipenv_demo 目录,并进入目录:

                C:\pipenv_demo>

            创建 Python 3.8 虚拟环境,运行如下命令:

                C:\pipenv_demo> pipenv install --python 3.8

                    Virtualenv already exists!
                    Removing existing virtualenv...
                    Creating a virtualenv for this project...
                    Pipfile: C:\pipenv_demo\Pipfile
                    Using c:/users/admin/appdata/local/programs/python/python38/python.exe (3.8.5) to create virtualenv...
                    [   =] Creating virtual environment...created virtual environment CPython3.8.5.final.0-64 in 389ms
                    creator CPython3Windows(dest=C:\pipenv_demo\.venv, clear=False, no_vcs_ignore=False, global=False)
                    seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=C:\Users\admin\AppData\Local\pypa\virtualenv)
                        added seed packages: pip==24.1.2, setuptools==71.0.4, wheel==0.43.0
                    activators BashActivator,BatchActivator,FishActivator,NushellActivator,PowerShellActivator,PythonActivator

                    Successfully created virtual environment!
                    Virtualenv location: C:\pipenv_demo\.venv
                    Pipfile.lock not found, creating...
                    Locking [dev-packages] dependencies...
                    Locking [packages] dependencies...
                    Updated Pipfile.lock (db4242)!
                    Installing dependencies from Pipfile.lock (db4242)...
                    ================================ 0/0 - 00:00:00
                    To activate this project's virtualenv, run pipenv shell.
                    Alternatively, run a command inside the virtualenv with pipenv run.

                    注:pipenv install 不带参数,安装系统的默认 Python 版本。--python 后面跟的参数可以不是版本号,而是已安装的 python.exe 的路径。

                C:\pipenv_demo> ls

                    目录: C:\pipenv_demo

                    Mode                 LastWriteTime         Length Name
                    ----                 -------------         ------ ----
                    d-----         2024/8/17      9:29                .venv
                    -a----         2024/8/17      8:18            138 Pipfile
                    -a----         2024/8/17      9:29            453 Pipfile.lock                


                注:pipenv install --python 命令运行后自动创建了 Pipfile、Pipfile.lock 和 .venv 文件夹,.venv 就是虚拟环境所在目录。Pipfile 里的 source.url 默认是 https://pypi.org/simple,最好把它改成国内的 pip 源,这里改成了阿里源 https://mirrors.aliyun.com/pypi/simple 。

            查看虚拟环境相关信息:

                # 工程根目录信息
                C:\pipenv_demo> pipenv --where

                    C:\pipenv_demo

                # 当前虚拟环境的信息
                C:\pipenv_demo> pipenv --venv

                    C:\pipenv_demo\.venv

                # Python 解释器的信息
                C:\pipenv_demo> pipenv --py

                    C:\pipenv_demo\.venv\Scripts\python.exe

                # 环境变量选项
                C:\pipenv_demo> pipenv --envs

                    ...
           


        (3) 不激活虚拟环境

            查看虚拟环境的包列表:

                C:\pipenv_demo> pipenv run pip -V

                    pip 24.1.2 from C:\pipenv_demo\.venv\lib\site-packages\pip (python 3.8)

                C:\pipenv_demo> pipenv run pip list

                    Package    Version
                    ---------- -------
                    pip        24.1.2
                    setuptools 71.0.4
                    wheel      0.43.0


            安装/卸载 numpy 包:

               C:\pipenv_demo> pipenv install numpy

                    Installing numpy...
                    Resolving numpy...
                    Added numpy to Pipfile's [packages] ...
                    Installation Succeeded
                    Pipfile.lock (8d041a) out of date: run `pipfile lock` to update to (04f6d8)...
                    Running $ pipenv lock then $ pipenv sync.
                    Locking [packages] dependencies...
                    Building requirements...
                    Resolving dependencies...
                    Success!
                    Locking [dev-packages] dependencies...
                    Updated Pipfile.lock (5a1e43bd1c0b1a49d7de8a7bd4f2d47edb726caac1733023f7d173c88f04f6d8)!
                    To activate this project's virtualenv, run pipenv shell.
                    Alternatively, run a command inside the virtualenv with pipenv run.
                    Installing dependencies from Pipfile.lock (04f6d8)...
                    All dependencies are now up-to-date!
                    To activate this project's virtualenv, run pipenv shell.
                    Alternatively, run a command inside the virtualenv with pipenv run.
                    Installing dependencies from Pipfile.lock (04f6d8)...

                    注:使用 pipenv install 命令会在 Pipfile 文件的 [packages] 下添加一行 numpy = "*"。使用 pipenv run pip install numpy 命令,则不会将 numpy = "*" 写入 Pipfile。

                C:\pipenv_demo> pipenv run pip list

                    Package    Version
                    ---------- -------
                    numpy      1.24.4
                    pip        24.1.2
                    setuptools 71.0.4
                    wheel      0.43.0

                C:\pipenv_demo> pipenv uninstall numpy

                    Removed numpy from Pipfile.
                    Uninstalling numpy...
                    Found existing installation: numpy 1.24.4
                    Uninstalling numpy-1.24.4:
                    Successfully uninstalled numpy-1.24.4


        (4) 激活虚拟环境

            激活虚拟环境,运行如下命令:

                C:\pipenv_demo> pipenv shell

                    Launching subshell in virtual environment...
                    Windows PowerShell
                    版权所有 (C) Microsoft Corporation。保留所有权利。

                    尝试新的跨平台 PowerShell https://aka.ms/pscore6


             查看虚拟环境的包列表:

                C:\pipenv_demo> pip -V

                    pip 24.1.2 from C:\pipenv_demo\.venv\lib\site-packages\pip (python 3.8)

                C:\pipenv_demo> pip list

                    Package    Version
                    ---------- -------
                    pip        24.1.2
                    setuptools 71.0.4
                    wheel      0.43.0


            安装/卸载 numpy 包 (在虚拟环境中):

                C:\pipenv_demo> pipenv install numpy

                    Installing numpy...
                    Resolving numpy...
                    Added numpy to Pipfile's [packages] ...
                    Installation Succeeded
                    Pipfile.lock (8d041a) out of date: run `pipfile lock` to update to (04f6d8)...
                    Running $ pipenv lock then $ pipenv sync.
                    Locking [packages] dependencies...
                    Building requirements...
                    Resolving dependencies...
                    Success!
                    Locking [dev-packages] dependencies...
                    Updated Pipfile.lock (5a1e43bd1c0b1a49d7de8a7bd4f2d47edb726caac1733023f7d173c88f04f6d8)!
                    Installing dependencies from Pipfile.lock (04f6d8)...
                    All dependencies are now up-to-date!
                    Installing dependencies from Pipfile.lock (04f6d8)...

                    注:使用 pipenv install 命令会在 Pipfile 文件的 [packages] 下添加一行 numpy = "*"。 使用 pip install 命令,则不会将 numpy = "*" 写入 Pipfile。

                C:\pipenv_demo> pip list

                    Package    Version
                    ---------- -------
                    numpy      1.24.4
                    pip        24.1.2
                    setuptools 71.0.4
                    wheel      0.43.0

                这里不卸载 numpy,在虚拟环境中卸载 numpy 的命令也是 pipenv uninstall numpy。


            退出虚拟环境,运行如下命令:

                C:\pipenv_demo> exit

        (5) 恢复/复制虚拟环境

            生成 requirements.txt:

                C:\pipenv_demo> pipenv requirements > requirements.txt

                    ...

            删除虚拟环境:

                C:\pipenv_demo> pipenv --rm

                    Removing virtualenv (C:\pipenv_demo\.venv)...

                注:.venv 目录被删除了,但 Pipfile.lock、 Pipfile、requirements.txt 依然存在。

           通过 Pipfile 恢复虚拟环境:

                C:\pipenv_demo> pipenv install

                    Creating a virtualenv for this project...
                    Pipfile: C:\pipenv_demo\Pipfile
                    Using C:/Users/admin/AppData/Local/Programs/Python/Python38/python.exe (3.8.5) to create virtualenv...
                    [    ] Creating virtual environment...created virtual environment CPython3.8.5.final.0-64 in 409ms
                    creator CPython3Windows(dest=C:\pipenv_demo\.venv, clear=False, no_vcs_ignore=False, global=False)
                    seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=C:\Users\admin\AppData\Local\pypa\virtualenv)
                        added seed packages: pip==24.1.2, setuptools==71.0.4, wheel==0.43.0
                    activators BashActivator,BatchActivator,FishActivator,NushellActivator,PowerShellActivator,PythonActivator

                    Successfully created virtual environment!
                    Virtualenv location: C:\pipenv_demo\.venv
                    To activate this project's virtualenv, run pipenv shell.
                    Alternatively, run a command inside the virtualenv with pipenv run.
                    To activate this project's virtualenv, run pipenv shell.
                    Alternatively, run a command inside the virtualenv with pipenv run.
                    Installing dependencies from Pipfile.lock (04f6d8)...

 
            通过 requirements.txt 恢复/复制虚拟环境,新建 C:\pipenv_demo2 目录,把 requirements.txt 复制到新目录,并进入该目录:

                C:\pipenv_demo2> pipenv run pip install -r requirements.txt

                    Creating a virtualenv for this project...
                    Pipfile: C:\pipenv_demo2\Pipfile
                    Using default python from c:\users\admin\appdata\local\programs\python\python38\python.exe (3.8.5) to create virtualenv...
                    [   =] Creating virtual environment...created virtual environment CPython3.8.5.final.0-64 in 409ms
                    creator CPython3Windows(dest=C:\pipenv_demo2\.venv, clear=False, no_vcs_ignore=False, global=False)
                    seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=C:\Users\admin\AppData\Local\pypa\virtualenv)
                        added seed packages: pip==24.1.2, setuptools==71.0.4, wheel==0.43.0
                    activators BashActivator,BatchActivator,FishActivator,NushellActivator,PowerShellActivator,PythonActivator

                    Successfully created virtual environment!
                    Virtualenv location: C:\pipenv_demo2\.venv
                    requirements.txt found in C:\pipenv_demo2 instead of Pipfile! Converting...
                    Failed...
                    Warning: Your Pipfile now contains pinned versions, if your requirements.txt did.
                    We recommend updating your Pipfile to specify the "*" version, instead.
                    Looking in indexes: https://mirrors.aliyun.com/pypi/simple/
                    Collecting numpy==1.24.4 (from -r requirements.txt (line 2))
                    Using cached https://mirrors.aliyun.com/pypi/packages/69/65/0d47953afa0ad569d12de5f65d964321c208492064c38fe3b0b9744f8d44/numpy-1.24.4-cp38-cp38-win_amd64.whl (14.9 MB)
                    Installing collected packages: numpy
                    Successfully installed numpy-1.24.4

                以上命令执行后,目录下会自动生成 Pipfile 文件,可以运行 pipenv lock (或 pipenv update) 命令生成 Pipfile.lock 文件。

        (6) 运行脚本或命令

            在 C:\pipenv_demo 目录下,创建一个 Python 文件 test.py, 代码如下:
                
                #!/usr/bin/python3

                print('Hello World - test.py')

            进入 C:\pipenv_demo 目录,运行如下命令:

                C:\pipenv_demo> pipenv run python test.py

                    Hello World - test.py

            修改 C:\pipenv_demo\Pipfile 文件,在文件末尾添加如下内容:
              
                [scripts]
                hello = "python -c \"print('Hello World - hello')\""
                piplist = "pip list"

            运行如下命令:

                C:\pipenv_demo> pipenv run hello

                    Hello World - hello

                C:\pipenv_demo> pipenv run piplist

                    Package    Version
                    ---------- -------
                    numpy      1.24.4
                    pip        24.1.2
                    setuptools 71.0.4
                    wheel      0.43.0


        Python 虚拟环境的本质是修改了 sys.path 的值,可以查看 Python 虚拟环境和 Python 主环境中的 sys.path 值。

            C:\pipenv_demo>python
     
                Python 3.8.5 (tags/v3.8.5:580fbb0, Jul 20 2020, 15:57:54) [MSC v.1924 64 bit (AMD64)] on win32
                Type "help", "copyright", "credits" or "license" for more information.
                >>> from pprint import pprint
                >>> import sys
                >>> pprint(sys.path)
                ['',
                'C:\\Users\\admin\\AppData\\Local\\Programs\\Python\\Python38\\python38.zip',
                'C:\\Users\\admin\\AppData\\Local\\Programs\\Python\\Python38\\DLLs',
                'C:\\Users\\admin\\AppData\\Local\\Programs\\Python\\Python38\\lib',
                'C:\\Users\\admin\\AppData\\Local\\Programs\\Python\\Python38',
                'C:\\Users\\admin\\AppData\\Local\\Programs\\Python\\Python38\\lib\\site-packages']
        
            C:\pipenv_demo>pipenv run python

                Python 3.8.5 (tags/v3.8.5:580fbb0, Jul 20 2020, 15:57:54) [MSC v.1924 64 bit (AMD64)] on win32
                Type "help", "copyright", "credits" or "license" for more information.
                >>> from pprint import pprint
                >>> import sys
                >>> pprint(sys.path)
                ['',
                'C:\\Users\\admin\\AppData\\Local\\Programs\\Python\\Python38\\python38.zip',
                'C:\\Users\\admin\\AppData\\Local\\Programs\\Python\\Python38\\DLLs',
                'C:\\Users\\admin\\AppData\\Local\\Programs\\Python\\Python38\\lib',
                'C:\\Users\\admin\\AppData\\Local\\Programs\\Python\\Python38',
                'C:\\pipenv_demo\\.venv',
                'C:\\pipenv_demo\\.venv\\lib\\site-packages']

 

 

本系列文章资料参考来源:
1. http://c.biancheng.net/python/
2. https://www.runoob.com/python3/python3-tutorial.html
3. https://www.python.org/


posted @ 2022-10-19 20:12  垄山小站  阅读(201)  评论(0编辑  收藏  举报