Python中的Modules和pip

本文深入探讨Python中Modules的概念,包括其目的、编译与缓存机制、dir()函数的使用、作为脚本执行的特点及查找路径。此外,详细介绍了Pip的安装、卸载、升级功能,以及配置选项,覆盖了wheel格式安装、本地安装和requirement file的使用。

Modules

   
对module的理解

     和Java中一个类就是一个文件不同(当然不考虑内部类),python中一个.py文件可以包含多个class。Modules的目的是代码的划分、管理以及代码重用。一个module是一个包含了定义和代码的文件,个人认为module包含了针对功能的相关代码,在一个module中可以存在多个类、函数甚至是需要预执行的脚本。



   compile&cache

    为了加快加载速度python会缓存.py文件,在__pycache__指定的目录中缓存文件按照“module.version.pyc”的名称保存,其中version部分是python的版本信息,这样使得不同版本的缓存可以共存。在引入module时python会检查是否存在缓存和缓存版本是否过期。但是以下两种情况,python不会加载缓存文件:
  • command line中执行python时每次都会重新编译,不会尝试加载。
  • 不存在源文件时,python不会直接从缓存中加载*.pyc文件。
    python是脚本语言但是存在一个“编译”的概念,其实python的编译时去除了代码中非必须的部分——assert和__doc__部分。“编译”并不是回想Java那样进行代码优化,“编译”的目的在于加快module加载的速度。编译时使用参数-O会忽略掉assert部分,使用-OO会同时忽略assert和__doc__,优化过的代码会保存为*.pyo的文件。


   dir

    dir()是python中内置的命令返回一个字符串数组,可以用来查看一个module声明的名称。通过dir(module_name)查看一个module声明的名称,不提供参数的情况下会返回当前文件的声明信息。


   作为脚本执行

    module本身就可以作为python脚本执行,命令行中通过python module.py可以直接执行module,除此以外在import时如果被引入的module中有独立的代码(即不是class或者function的定义)也会被执行。如果希望只在作为独立脚本是被执行,可以写成如下:

if __name__ == '__main__':
    print('your code.')


Module的查找路径

    python会通过两个地方查找被引入的module——builtins和sys.path。builtins是python内置的标准函数库,可能因不同的平台而有所不同,sys.path则分为项目目录和PYTHONPATH两部分。当一个module被引入时,python先查找builtins,如果没有找到则尝试在当前目录查找,如果仍然没有则查找PYTHONPATH也就是python的site-package目录。因此如果在项目目录中声明了和PYTHONPATH中同名的module,那么项目目录中的module会优先加载。

与package关系

    python中的package就是代码在的目录路径,通过"."的表达式标识。在pythong中可以通过from aaa.bbb import ccc和import aaa.bbb.ccc或者fromaaa import bbb.ccc来达到引入ccc的目的,不同之处是import之后的内容在使用时需要提供全名称,也就是上述三种写法在使用时分别要调用:ccc.fun()、aaa.bbb.ccc.fun()、bbb.ccc.fun()。
    package所在的目录需要包含一个空文件__init__.py来表明这个是一个python package,同时在__init__.py文件中可以声明一些描述性的代码来变更package的特性。比如针对import *的__all__,正常情况下我们写from aaa.bbb import *会引入位于aaa/bbb目录下的所有modules——这是一个不好的实践,因为有些东西可能会有副作用。特别的如果某个package下有你明确不希望被引用的py文件,可以通过__all__明确说明哪些是希望引入的,这样在python处理import *时会忽略掉不在__all__列表的内容。如下面的__init__.py指明了在import *时只有persons这个module会被引入。

__author__ = 'Administrator'
__all__ = ['persons',]




Pip

    pip是用于安装PyPI中所列出的package的工具。PyPI即Python Package Index,是python提供的一个lib的在线仓库类似于Java的maven。pip的功能包括几方面:安装、卸载、升级、查看和本地安装、配置。

  Install、List、Local Install、Search

    pip用于安装package的命令install,使用命令pip install somepackage完成安装。一般情况下pip会选择最新的版本安装,可以通过参数version指定希望的package版本。除了单个package的安装pip还可以通过requirement file进行批量安装,命令:pip install -r requirement.txt。requirement file本身就是一个包含多个package列表文本文件,并且可以接受version等参数。使用requirement file的目的包括:

  • 可重复安装,对于团队的生产环境需要安装统一的配置,可以直接用requirement file搞定。
  • 解决依赖,pip默认安装最新的版本,但是多个package之间可能需要特定的版本来相互配合,可以把构建好的环境整理成requirement file。
  • 安装特定的版本,比如新的版本可能引入了bug或者冲突,所以使用requirement file来指定一个版本。
  • 自定义源文件的安装,软件中存在bug并且你已经等不及原作者去修复了。你自己修复后可以使用requirement file指定某一package从特定路径安装。

    pip还支持wheel格式的安装,wheel是一种package的压缩格式要比通过源码的安装快速,默认情况下pip优先选择wheel格式安装,只有在无法找到wheel文件时才会从源文件安装。wheel是pip的一个模块,通过一下命令可以把源文件打包成wheel和从指定wheel文件安装package:

#打包
pip wheel --wheel-dir=/your_wheel_directory -r requirement.txt
#安装
pip install --no-index --find-links=/your_wheel_directory -r requirement.txt



    pip支持从本地文件进行安装,对于重复安装的场景免除了每次网络传输的开销,通过下面命令自动下载打包安装文件和进行安装:
#下载
pip install --download <DIR> -r requirements.txt
#安装
pip install --no-index --find-links=[file://]<DIR> -r requirements.txt



    pip通过list命令查看已经安装的package或者是过期的package,通过show命令查看文件的详细信息。
#查看已经安装的package
pip list
#查看过期的package
pip list --outdated
#查看某个package的详细
pip show Django



    pip提供了search命令用来查找PyPI中的package信息,如pip search django。


Uninstall、Upgrade

        需要删除一个package使用命令pip uninstall package_name即可,同样的需要升级一个package也可以通过命令pip upgrade package_name实现。需要注意的是pip的upgrade命令是递归的,也就是新版本的package所依赖的sub_package如果有新版也会被同时更新,即便现有的版本已经满足需求,不希望递归更新时使用命令:
pip install --upgrade --no-deps SomePackage
pip install SomePackage



    第一行的命令会更新package但是不会安装依赖,第二行命令会按照SomePackage需要的但是没有安装的package。

Configuration

    不同的操作系统平台pip的安装文件位置有所不同,Linux和MacOS中位于%HOME%/pip/pip.conf,Windows下位于%HOME/pip/pip.ini。pip的配置可以分为两个作用范围:整体和子命令。比如:

[global]
timeout = 60

[freeze]
timeout = 10



    global规定pip连接的超时时间是60秒,而freeze模块(即requirement file)的超时时间是10秒。除此之外pip的配置还可以通过环境变量和命令行参数传递,三者的优先级是:命令行参数>环境变量>配置文件。比如timeout参数还可以通过下面途径设置:
#设置环境变量
export PIP_DEFAULT_TIMEOUT=60
#命令行参数
pip --default-timeout=60 [...]



    常用的pip参数有:
  • timeout:设置超时时间
  • index-url:指定PyPI的基路径。
  • find-links <url>:设置package所在的路径,如果url执行html文件那么解析这个文件,如果url是"file://"那么在url指定目录的文件列表里查找。
  • no-index:忽略index,只在find-links时使用。
  • ignore-installed:强制安装,即便已经安装了。
  • no-deps:忽略依赖关系。




转载于:https://my.oschina.net/pangyangyang/blog/201602

<think>我们正在为Python 2.7.18安装pip。根据引用[1]引用[3],Python 2.7.18本身不带pip,但我们可以通过`ensurepip`模块或下载`get-pip.py`脚本来安装。 注意:Python 2.7已于2020年停止支持,因此安装过程可能会遇到一些兼容性问题。 以下是两种主要方法: 方法一:使用`ensurepip`模块(如果Python编译时包含了该模块) 1. 运行命令:`python2.7 -m ensurepip --default-pip` 2. 这将会安装pipsetuptools。但注意,安装的pip版本可能较旧(如pip 19.2.3)。 方法二:使用`get-pip.py`脚本(推荐,可安装较新版本的pip,但注意Python2.7最高支持的pip版本为20.3.4) 1. 下载安装脚本:`curl https://bootstrap.pypa.io/pip/2.7/get-pip.py -o get-pip.py` 2. 运行脚本:`python2.7 get-pip.py` 注意:在安装之前,确保系统已安装必要的依赖库(如zlib)。根据引用[3]引用[5],可能需要安装zlib开发包: 对于CentOS/RHEL:`sudo yum install zlib-devel` 对于Ubuntu/Debian:`sudo apt-get install zlib1g-dev` 此外,如果是从源代码编译Python 2.7.18,在编译之前需要取消`Modules/Setup.dist`中zlib相关行的注释,并重新编译(引用[3])。 步骤详细说明: 1. 安装依赖(以Ubuntu为例): ```bash sudo apt update sudo apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev wget ``` 2. 如果尚未安装Python 2.7.18,请先安装(这里假设已经安装,如果没有安装,请参考引用[3]的步骤)。 3. 使用`ensurepip`方法(最简单): ```bash python2.7 -m ensurepip --default-pip ``` 或者使用`get-pip.py`方法: ```bash wget https://bootstrap.pypa.io/pip/2.7/get-pip.py python2.7 get-pip.py ``` 4. 验证安装: ```bash python2.7 -m pip --version ``` 注意:由于Python 2.7已停止维护,建议尽快升级到Python 3。 引用说明: 引用[1]展示了在Python 2.7.18中使用`ensurepip`安装pip的过程,并成功安装了pip-19.2.3setuptools-41.2.0。 引用[3]详细说明了在CentOS 9上安装Python 2.7.18pip2的完整步骤,包括依赖安装编译选项。 根据引用[3],在编译Python 2.7.18之前,需要编辑`Modules/Setup.dist`文件,取消zlib的注释,以确保pip安装时不会因缺少zlib而失败。 如果遇到问题,请检查依赖是否安装完整,以及Python是否编译了zlib模块。 生成相关问题: </think>### 为 Python 2.7.18 安装 pip 的完整指南 Python 2.7.18 默认不包含 pip 工具,但可通过以下两种方法安装: #### 方法一:使用 ensurepip 模块(推荐) ```bash # 在 Python 2.7.18 环境中执行 python2.7 -m ensurepip --default-pip ``` - 自动安装 pip setuptools - 完成后验证:`python2.7 -m pip --version` 应显示 `pip 19.2.3` 或类似版本[^1] - 优点:无需额外下载脚本 #### 方法二:使用 get-pip.py 脚本 ```bash # 1. 下载安装脚本 curl -O https://bootstrap.pypa.io/pip/2.7/get-pip.py # 2. 运行安装 python2.7 get-pip.py ``` --- ### 关键依赖安装(解决常见错误) 安装前必须满足以下依赖,否则会报 `zlib not available` 等错误: ```bash # Ubuntu/Debian sudo apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev # CentOS/RHEL sudo yum install zlib-devel gcc openssl-devel bzip2-devel libffi-devel ``` --- ### 编译安装注意事项(源码安装场景) 若从源码安装 Python 2.7.18: 1. 编辑 `Python-2.7.18/Modules/Setup.dist` 2. 取消 **zlib** 行的注释: ```makefile zlib zlibmodule.c -I$(prefix)/include -L$(exec_prefix)/lib -lz ``` 3. 编译时使用: ```bash ./configure --enable-optimizations make altinstall # 避免覆盖系统默认 Python ``` 4. 设置环境变量: ```bash export PATH="/usr/local/bin:$PATH" ``` --- ### 验证安装 ```bash python2.7 -m pip --version # 预期输出:pip 19.2.3 from ... (python 2.7) ``` --- ### 注意事项 1. Python 2.7 已于 **2020-01-01** 停止官方支持[^1] 2. 最高兼容 pip 版本为 **20.3.4** 3. 安装后建议立即升级 pip: ```bash python2.7 -m pip install --upgrade "pip < 21.0" ``` 4. 使用 `altinstall` 避免覆盖系统 Python(CentOS/RHEL 尤其重要)[^3] > **重要提示**:生产环境强烈建议迁移至 Python 3.x,Python 2 的包生态已严重老化且存在安全隐患。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值