跳转至

20 包管理器-pip⚓︎

包管理器-pip⚓︎

什么是 PIP?⚓︎

PIP 代表首选安装程序。我们使用 pip 来安装不同的 Python 包。 包是一个可以包含一个或多个模块或其他包的 Python 模块。我们可以安装到我们的应用程序中的一个或多个模块就是一个包。 在编程中,我们不必编写每个实用程序,而是安装包并将其导入到我们的应用程序中。

安装 PIP⚓︎

如果您尚未安装 pip,请让我们现在安装它。转到您的终端或命令提示符,然后复制并粘贴以下内容:

pip install pip

通过输入以下命令检查是否安装了 pip:

pip --version
pip 21.1.3 from /usr/local/lib/python3.7/site-packages/pip (python 3.9.6)

如您所见,我使用的是 pip 版本 21.1.3,如果您看到稍微低于或高于这个数字的某个数字,那就表示您已经安装了 pip。

让我们检查 Python 社区中用于不同目的的一些包。只是让您知道,有许多可用于不同应用程序的包。

使用 pip 安装包⚓︎

让我们尝试安装 numpy,也叫做数值 Python。这是机器学习和数据科学社区中最流行的包之一。

  • NumPy 是用于科学计算的基础包。它包含了:
  • 强大的 N 维数组对象
  • 复杂的(广播broadcasting)函数
  • 用于集成 C/C++ 和 Fortran 代码的工具
  • 有用的线性代数、傅里叶变换和随机数功能
pip install numpy

让我们开始使用 numpy。打开您的 Python 交互式 shell,输入 python,然后按照以下方式导入 numpy:

$ python
Python 3.8.16 (default, Mar  2 2023, 03:18:16) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy
>>> numpy.version.version
'1.20.1'
>>> lst = [1, 2, 3,4, 5]
>>> np_arr = numpy.array(lst)
>>> np_arr
array([1, 2, 3, 4, 5])
>>> len(np_arr)
5
>>> np_arr * 2
array([ 2,  4,  6,  8, 10])
>>> np_arr  + 2
array([3, 4, 5, 6, 7])
>>>

Pandas 是一个开源的 BSD 许可的库,为 Python 编程语言提供高性能、易于使用的数据结构和数据分析工具。让我们安装 numpy 的大兄弟 pandas

pip install pandas
$ python
Python 3.8.16 (default, Mar  2 2023, 03:18:16) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import pandas

此部分不涉及 numpy 或 pandas,我们只是在试图学习如何安装包以及如何导入它们。如果需要,我们将在其他部分讨论不同的包。

让我们导入一个 Web 浏览器模块,它可以帮助我们打开任何网站。我们不需要安装此模块,它已经默认与 Python 3 一起安装。例如,如果您想随时打开任意数量的网站,或者如果您想安排一些任务,可以使用此 webbrowser 模块。

import webbrowser # 用于打开网站的web浏览器模块

# url列表:python
url_lists = [
    'http://www.python.org',
    'https://github.com/YQisme',
    'https://github.com/EanYang7/Python-Full-Stack',
]

# 在其他选项卡中打开以上网站列表
for url in url_lists:
    webbrowser.open_new_tab(url)

卸载包⚓︎

如果您不想保留已安装的包,可以使用以下命令将它们删除。

pip uninstall packagename

包列表⚓︎

要查看计算机上已安装的包,可以使用 pip 后跟 list。

pip list

显示包信息⚓︎

要显示有关包的信息

pip show packagename
$ pip show pandas
Name: pandas
Version: 1.2.3
Summary: Powerful data structures for data analysis, time series, and statistics
Home-page: http://pandas.pydata.org
Author: None
Author-email: None
License: BSD
Location: /usr/local/lib/python3.7/site-packages
Requires: python-dateutil, pytz, numpy
Required-by:

如果我们想要更多的细节,只需添加 --verbose

$ pip show --verbose pandas
Name: pandas
Version: 1.2.3
Summary: Powerful data structures for data analysis, time series, and statistics
Home-page: http://pandas.pydata.org
Author: None
Author-email: None
License: BSD
Location: /usr/local/lib/python3.7/site-packages
Requires: numpy, pytz, python-dateutil
Required-by:


Metadata-Version: 2.1
Installer: pip
Classifiers:
  Development Status :: 5 - Production/Stable
  Environment :: Console
  Operating System :: OS Independent
  Intended Audience :: Science/Research
  Programming Language :: Python
  Programming Language :: Python :: 3
  Programming Language :: Python :: 3.5
  Programming Language :: Python :: 3.6
  Programming Language :: Python :: 3.7
  Programming Language :: Python :: 3.8
  Programming Language :: Cython
  Topic :: Scientific/Engineering
Entry-points:
  [pandas_plotting_backends]
  matplotlib = pandas:plotting._matplotlib

PIP 冻结Freeze⚓︎

生成已安装的 Python 包以及它们的版本,输出适合在 requirements 文件中使用的格式。requirements.txt 文件是一个应包含 Python 项目中所有已安装的 Python 包的文件。

$ pip freeze
docutils==0.11
Jinja2==2.7.2
MarkupSafe==0.19
Pygments==1.6
Sphinx==1.2.2

pip freeze 给了我们使用的包、已安装的包及其版本。我们将它与 requirements.txt 文件一起使用进行部署。

从 URL 读取⚓︎

到目前为止,您已经知道如何读取或写入位于本地计算机上的文件。有时,我们希望使用 URL 或 API 从网站读取数据。 API 代表应用程序编程接口。它是一种在服务器之间交换结构化数据的手段,主要是 JSON 数据。要打开网络连接,我们需要一个称为 requests 的包 - 它允许打开网络连接并实现 CRUD(创建、读取、更新和删除)操作。在本节中,我们将仅涵盖 CRUD 的一部分,即读取或获取。

让我们安装 requests

pip install requests

我们将在 requests 模块中看到 getstatus_codeheaderstextjson 方法:

  • get():打开网络并从 URL 获取数据 - 它返回一个响应对象
  • status_code:在获取数据后,我们可以检查操作的状态(成功、错误等)
  • headers:检查头部类型
  • text:从获取的响应对象中提取文本
  • json:提取 JSON 数据 让我们从此网站读取一个 txt 文件,https://www.w3.org/TR/PNG/iso_8859-1.txt。
import requests # 导入请求模块

url = 'https://www.python.org/' # 从网站获取文本

response = requests.get(url) # 打开网络并获取数据
print(response)
print(response.status_code) # 状态码,成功:200
print(response.headers)     # 头部信息
print(response.text) # 提供页面上的所有文本

image-20240113120841238

  • 让我们从 API 读取。API 代表 Application Program Interface。它是一种在服务器之间交换结构化数据的手段,主要是 JSON 数据。一个示例是:https://restcountries.eu/rest/v2/all。让我们使用 requests 模块读取此 API。
import requests
url = 'https://restcountries.com/v3.1/all'  # 国家API
response = requests.get(url)  # 打开网络并获取数据
print(response) # 响应对象
print(response.status_code)  # 状态码,成功:200
countries = response.json()
print(countries[:1])  # 我们只切片了第一个国家,去掉切片以查看所有国家
<Response [200]>
200
[
    {'name': {'common': 'Christmas Island', 'official': 'Territory of Christmas Island', 'nativeName': {'eng': {'official': 'Territory of Christmas Island', 'common': 'Christmas Island'
                }
            }
        }, 'tld': ['.cx'
        ], 'cca2': 'CX', 'ccn3': '162', 'cca3': 'CXR', 'independent': False, 'status': 'officially-assigned', 'unMember': False, 'currencies': {'AUD': {'name': 'Australian dollar', 'symbol': '$'
            }
        }, 'idd': {'root': '+6', 'suffixes': ['1'
            ]
        }, 'capital': ['Flying Fish Cove'
        ], 'altSpellings': ['CX', 'Territory of Christmas Island'
        ], 'region': 'Oceania', 'subregion': 'Australia and New Zealand', 'languages': {'eng': 'English'
        }, 'translations': {'ara': {'official': 'جزيرة كريسماس', 'common': 'جزيرة كريسماس'
            }, 'bre': {'official': 'Tiriad Enez Christmas', 'common': 'Enez Christmas'
            }, 'ces': {'official': 'Teritorium Vánočního ostrova', 'common': 'Vánoční ostrov'
            }, 'cym': {'official': 'Tiriogaeth yr Ynys y Nadolig', 'common': 'Ynys y Nadolig'
            }, 'deu': {'official': 'Gebiet der Weihnachtsinsel', 'common': 'Weihnachtsinsel'
            }, 'est': {'official': 'Jõulusaare ala', 'common': 'Jõulusaar'
            }, 'fin': {'official': 'Joulusaaren alue', 'common': 'Joulusaari'
            }, 'fra': {'official': "Territoire de l'île Christmas", 'common': 'Île Christmas'
            }, 'hrv': {'official': 'Teritorij Božićni otok', 'common': 'Božićni otok'
            }, 'hun': {'official': 'Karácsony-sziget', 'common': 'Karácsony-sziget'
            }, 'ita': {'official': 'Territorio di Christmas Island', 'common': 'Isola di Natale'
            }, 'jpn': {'official': 'クリスマス島の領土', 'common': 'クリスマス島'
            }, 'kor': {'official': '크리스마스 섬', 'common': '크리스마스 섬'
            }, 'nld': {'official': 'Grondgebied van Christmas Island', 'common': 'Christmaseiland'
            }, 'per': {'official': 'جزیرهٔ کریسمس', 'common': 'جزیرهٔ کریسمس'
            }, 'pol': {'official': 'Wyspa Bożego Narodzenia', 'common': 'Wyspa Bożego Narodzenia'
            }, 'por': {'official': 'Território da Ilha Christmas', 'common': 'Ilha do Natal'
            }, 'rus': {'official': 'Территория острова Рождества', 'common': 'Остров Рождества'
            }, 'slk': {'official': 'Teritórium Vianočného ostrova', 'common': 'Vianočnú ostrov'
            }, 'spa': {'official': 'Territorio de la Isla de Navidad', 'common': 'Isla de Navidad'
            }, 'srp': {'official': 'Божићно Острво', 'common': 'Божићно Острво'
            }, 'swe': {'official': 'Julön', 'common': 'Julön'
            }, 'tur': {'official': 'Christmas Adası', 'common': 'Christmas Adası'
            }, 'urd': {'official': 'ریاستِ جزیرہ کرسمس', 'common': 'جزیرہ کرسمس'
            }, 'zho': {'official': '圣诞岛', 'common': '圣诞岛'
            }
        }, 'latlng': [
            -10.5,
            105.66666666
        ], 'landlocked': False, 'area': 135.0, 'demonyms': {'eng': {'f': 'Christmas Islander', 'm': 'Christmas Islander'
            }
        }, 'flag': '🇨🇽', 'maps': {'googleMaps': 'https: //goo.gl/maps/ZC17hHsQZpShN5wk9', 'openStreetMaps': 'https://www.openstreetmap.org/relation/6365444'}, 'population': 2072, 'car': {'signs': ['AUS'], 'side': 'left'}, 'timezones': ['UTC+07:00'], 'continents': ['Asia'], 'flags': {'png': 'https://flagcdn.com/w320/cx.png', 'svg': 'https://flagcdn.com/cx.svg'}, 'coatOfArms': {'png': 'https://mainfacts.com/media/images/coats_of_arms/cx.png', 'svg': 'https://mainfacts.com/media/images/coats_of_arms/cx.svg'}, 'startOfWeek': 'monday', 'capitalInfo': {'latlng': [-10.42, 105.68]}, 'postalCode': {'format': '####', 'regex': '^(\\d{4})$'}}]

如果我们获取JSON数据,我们使用响应对象的 json() 方法。对于txt、html、xml和其他文件格式,我们可以使用 text

创建一个包⚓︎

我们根据某些标准将大量文件组织在不同的文件夹和子文件夹中,以便我们可以轻松地找到和管理它们。正如您所知,一个模块可以包含多个对象,如类、函数等。一个包可以包含一个或多个相关的模块。实际上,包是一个包含一个或多个模块文件的文件夹。让我们使用以下步骤创建一个名为mypackage的包:

在mypackage文件夹中创建一个空的__init__.py文件。 使用以下代码创建名为arithmetics.py和greet.py的模块:

# mypackage/arithmetics.py
# arithmetics.py
def add_numbers(*args):
    total = 0
    for num in args:
        total += num
    return total


def subtract(a, b):
    return (a - b)


def multiple(a, b):
    return a * b


def division(a, b):
    return a / b


def remainder(a, b):
    return a % b


def power(a, b):
    return a ** b
# mypackage/greet.py
# greet.py
def greet_person(firstname, lastname):
    return f'{firstname} {lastname}, welcome to 30DaysOfPython Challenge!'

您的包的文件夹结构应如下所示:

 mypackage
    ├── __init__.py
    ├── arithmetic.py
    └── greet.py

现在让我们打开Python交互式 shell,并尝试我们创建的包:

$ python
Python 3.9.6 (default, Jun 28 2021, 15:26:21)
[Clang 11.0.0 (clang-1100.0.33.8)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from mypackage import arithmetics
>>> arithmetics.add_numbers(1, 2, 3, 5)
11
>>> arithmetics.subtract(5, 3)
2
>>> arithmetics.multiple(5, 3)
15
>>> arithmetics.division(5, 3)
1.6666666666666667
>>> arithmetics.remainder(5, 3)
2
>>> arithmetics.power(5, 3)
125
>>> from mypackage import greet
>>> greet.greet_person('Asabeneh', 'Yetayeh')
'Asabeneh Yetayeh, welcome to 30DaysOfPython Challenge!'
>>>

正如您所见,我们的包完美运行。包文件夹包含一个名为__init__.py的特殊文件 - 它存储包的内容。如果我们将__init__.py放在包文件夹中,Python将开始将其识别为包。__init__.py将包的指定资源暴露给其他Python文件导入。空的__init__.py文件使得在导入包时所有函数都可用。__init__.py对于Python识别文件夹为包至关重要。

关于包的更多信息⚓︎

  • 数据库
    • SQLAlchemy或SQLObject - 面向对象的访问多个不同数据库系统
    • pip install SQLAlchemy
  • Web开发
    • Django - 高级Web框架。
      • pip install django
    • Flask - 基于Werkzeug、Jinja 2的微框架(BSD许可证)
      • pip install flask
  • HTML解析器
    • Beautiful Soup - 为快速周转项目设计的HTML/XML解析器,将接受不良标记。
      • pip install beautifulsoup4
    • PyQuery - 在Python中实现jQuery;比BeautifulSoup更快,显然。
  • XML处理
    • ElementTree - Element类型是一个简单但灵活的容器对象,设计用于在内存中存储分层数据结构,例如简化的XML信息集。--注意:Python 2.5及更高版本在标准库中有ElementTree。
  • GUI
    • PyQt - 跨平台Qt框架的绑定。
    • TkInter - 传统的Python用户界面工具包。
  • 数据分析、数据科学和机器学习
    • Numpy:Numpy(数值Python)被认为是Python中最流行的机器学习库之一。
    • Pandas:是Python中的数据分析、数据科学和机器学习库,提供了高级数据结构和各种分析工具。
    • SciPy:SciPy是面向应用开发人员和工程师的机器学习库。SciPy库包含了用于优化、线性代数、积分、图像处理和统计的模块。
    • Scikit-Learn:它是NumPy和SciPy。被认为是处理复杂数据的最佳库之一。
    • TensorFlow:是由Google构建的机器学习库。
    • Keras:被认为是Python中最酷的机器学习库之一。它提供了一个更容易表达神经网络的机制。Keras还提供了一些最佳的工具,用于编译模型、处理数据集、可视化图形等等。
  • 网络:
    • requests:是一个包,我们可以使用它发送请求到服务器(GET、POST、DELETE、PUT)
      • pip install requests

练习:第20天⚓︎

  1. 读取此网址并查找前10个最常见的单词。romeo_and_juliet = 'http://www.gutenberg.org/files/1112/1112.txt'
  2. 读取猫的API和cats_api = 'https://api.thecatapi.com/v1/breeds',并找到:
  3. 猫的体重在公制单位中的最小值、最大值、平均值、中位数、标准差。
  4. 猫的寿命在年份中的最小值、最大值、平均值、中位数、标准差。
  5. 创建一个国家和猫种的频率表。
  6. 读取国家API并查找:
  7. 十个最大的国家
  8. 十种最常用的语言
  9. 国家API中的语言总数
  10. UCI是获取数据科学和机器学习数据集的最常见地点之一。读取UCL(https://archive.ics.uci.edu/ml/datasets.php)的内容。如果没有其他库,这将很困难,所以您可以尝试使用BeautifulSoup4。