mirror of
https://github.com/Asabeneh/30-Days-Of-Python.git
synced 2026-06-06 21:09:15 +08:00
352 lines
11 KiB
Markdown
352 lines
11 KiB
Markdown
# 30天Python编程挑战:第20天 - PIP
|
||
|
||
- [第20天](#-第20天)
|
||
- [Python PIP - Python包管理器](#python-pip---python包管理器)
|
||
- [什么是PIP?](#什么是pip)
|
||
- [安装PIP](#安装pip)
|
||
- [使用pip安装包](#使用pip安装包)
|
||
- [卸载包](#卸载包)
|
||
- [包列表](#包列表)
|
||
- [显示包信息](#显示包信息)
|
||
- [PIP Freeze](#pip-freeze)
|
||
- [从URL读取数据](#从url读取数据)
|
||
- [创建包](#创建包)
|
||
- [关于包的更多信息](#关于包的更多信息)
|
||
- [练习:第20天](#练习第20天)
|
||
|
||
# 📘 第20天
|
||
|
||
## Python PIP - Python包管理器
|
||
|
||
### 什么是PIP?
|
||
|
||
PIP代表首选安装程序(Preferred installer program)。我们使用_pip_来安装不同的Python包。
|
||
包是一个Python模块,可以包含一个或多个模块或其他包。我们可以安装到应用程序中的模块或模块集合就是一个包。
|
||
在编程中,我们不必编写每个实用程序,而是安装包并将它们导入到我们的应用程序中。
|
||
|
||
### 安装PIP
|
||
|
||
如果你还没有安装pip,让我们现在安装它。转到你的终端或命令提示符,复制并粘贴:
|
||
|
||
```sh
|
||
asabeneh@Asabeneh:~$ pip install pip
|
||
```
|
||
|
||
通过以下命令检查pip是否已安装:
|
||
|
||
```sh
|
||
pip --version
|
||
```
|
||
|
||
```py
|
||
asabeneh@Asabeneh:~$ 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是Python科学计算的基础包。它包含以下内容:
|
||
- 强大的N维数组对象
|
||
- 复杂的(广播)函数
|
||
- 用于集成C/C++和Fortran代码的工具
|
||
- 有用的线性代数、傅里叶变换和随机数功能
|
||
|
||
```sh
|
||
asabeneh@Asabeneh:~$ pip install numpy
|
||
```
|
||
|
||
让我们开始使用numpy。打开你的Python交互式shell,输入python,然后按如下方式导入numpy:
|
||
|
||
```py
|
||
asabeneh@Asabeneh:~$ 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.
|
||
>>> 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_:
|
||
|
||
```sh
|
||
asabeneh@Asabeneh:~$ pip install pandas
|
||
```
|
||
|
||
```py
|
||
asabeneh@Asabeneh:~$ 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.
|
||
>>> import pandas
|
||
```
|
||
|
||
这一节不是关于numpy或pandas的,我们在这里尝试学习如何安装包以及如何导入它们。如果需要,我们将在其他章节讨论不同的包。
|
||
|
||
让我们导入一个Web浏览器模块,它可以帮助我们打开任何网站。我们不需要安装这个模块,它已经默认安装在Python 3中。例如,如果你想随时打开任意数量的网站,或者如果你想安排某些事情,可以使用这个_webbrowser_模块。
|
||
|
||
```py
|
||
import webbrowser # web浏览器模块用于打开网站
|
||
|
||
# 网址列表:Python
|
||
url_lists = [
|
||
'http://www.python.org',
|
||
'https://www.linkedin.com/in/asabeneh/',
|
||
'https://github.com/Asabeneh',
|
||
'https://twitter.com/Asabeneh',
|
||
]
|
||
|
||
# 在不同的标签页中打开上面的网站列表
|
||
for url in url_lists:
|
||
webbrowser.open_new_tab(url)
|
||
```
|
||
|
||
### 卸载包
|
||
|
||
如果你不想保留已安装的包,可以使用以下命令删除它们。
|
||
|
||
```sh
|
||
pip uninstall packagename
|
||
```
|
||
|
||
### 包列表
|
||
|
||
要查看我们机器上已安装的包,我们可以使用pip后跟list。
|
||
|
||
```sh
|
||
pip list
|
||
```
|
||
|
||
### 显示包信息
|
||
|
||
要显示有关包的信息:
|
||
|
||
```sh
|
||
pip show packagename
|
||
```
|
||
|
||
```sh
|
||
asabeneh@Asabeneh:~$ 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
|
||
|
||
```sh
|
||
asabeneh@Asabeneh:~$ 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包的文件。
|
||
|
||
```sh
|
||
asabeneh@Asabeneh:~$ 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_:
|
||
|
||
```py
|
||
asabeneh@Asabeneh:~$ pip install requests
|
||
```
|
||
|
||
我们将在_requests_模块中看到_get_、_status_code_、_headers_、_text_和_json_方法:
|
||
- _get()_:打开网络并从url获取数据——它返回一个响应对象
|
||
- _status_code_:在我们获取数据后,我们可以检查操作的状态(成功、错误等)
|
||
- _headers_:检查头部类型
|
||
- _text_:从获取的响应对象中提取文本
|
||
- _json_:提取json数据
|
||
让我们从这个网站读取一个txt文件,https://www.w3.org/TR/PNG/iso_8859-1.txt。
|
||
|
||
```py
|
||
import requests # 导入请求模块
|
||
|
||
url = 'https://www.w3.org/TR/PNG/iso_8859-1.txt' # 来自网站的文本
|
||
|
||
response = requests.get(url) # 打开网络并获取数据
|
||
print(response)
|
||
print(response.status_code) # 状态码,成功时为200
|
||
print(response.headers) # 获取响应的头部信息
|
||
print(response.text) # 获取文本数据
|
||
```
|
||
|
||
让我们读取一个API并得到一个json数据:
|
||
|
||
```py
|
||
import requests
|
||
url = 'https://restcountries.eu/rest/v2/all' # 包含关于250多个国家的信息的国家API
|
||
response = requests.get(url) # 打开网络并获取数据
|
||
print(response) # 响应对象
|
||
print(response.status_code) # 状态码,成功时为200
|
||
countries = response.json()
|
||
print(countries[:1]) # 我们只打印第一个国家信息,原始数据太大
|
||
```
|
||
|
||
我们用一个国家API示例获取了json数据。我们可以导入json模块,并使用json.loads(response.text)方法将文本转换为json格式。然而,我们也可以直接使用response.json()方法。
|
||
|
||
Let us see another example similar to the above but with a different API, world_bank_ethiopia data:
|
||
让我们看另一个类似于上面的例子,但使用不同的API,世界银行埃塞俄比亚数据:
|
||
|
||
```py
|
||
import requests
|
||
from pprint import pp # 导入pretty print,以美观地显示
|
||
|
||
url = 'http://api.worldbank.org/countries/et?format=json' # 埃塞俄比亚经济数据API
|
||
response = requests.get(url) # 打开网络并获取数据
|
||
print(response) # 响应对象
|
||
print(response.status_code) # 状态码,成功时为200
|
||
# 让我们改变响应的JSON格式
|
||
ethiopia_data = response.json()
|
||
pp(ethiopia_data) # 用pretty print打印数据
|
||
```
|
||
|
||
### 创建包
|
||
|
||
我们可以创建自己的包,上传到Python包管理器仓库,并从那里下载它。让我们创建一个非常简单的包来演示。创建一个名为mypackage的目录,在该目录中创建一个名为__init__.py的空文件和以下文件:
|
||
|
||
```py
|
||
# mypackage/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
|
||
```
|
||
|
||
```py
|
||
# mypackage/greet.py
|
||
def greet_person(firstname, lastname):
|
||
return f'{firstname} {lastname}, welcome to 30DaysOfPython Challenge!'
|
||
```
|
||
|
||
__init__.py在python 3.3及更高版本中并非绝对必要,但对于兼容性,最好加上。
|
||
|
||
现在,让我们使用刚刚创建的包:
|
||
|
||
```py
|
||
from mypackage import arithmetics
|
||
print(arithmetics.add_numbers(1, 2, 3, 5))
|
||
print(arithmetics.subtract(5, 3))
|
||
print(arithmetics.multiple(5, 3))
|
||
print(arithmetics.division(5, 3))
|
||
print(arithmetics.remainder(5, 3))
|
||
print(arithmetics.power(5, 3))
|
||
|
||
from mypackage import greet
|
||
print(greet.greet_person('张', '三'))
|
||
```
|
||
|
||
### 关于包的更多信息
|
||
|
||
- Python有许多不同目的的内置包和模块,但有些不包含在内置包中,我们需要安装它们。
|
||
- 有多种方法可以安装包,但建议使用pip。
|
||
- 使用 pip:pip是Python、PyPI和virtualenv推荐的安装和管理Python包的工具。
|
||
- 如何列出已安装的包:
|
||
- pip list:列出机器中安装的所有包。
|
||
- 使用requirements.txt进行开发环境和生产环境:
|
||
- 要生成已安装包的列表:pip freeze来本地生成已安装包的列表,以便用于开发环境和生产环境需求。
|
||
- 如何卸载包:
|
||
- 要卸载,请使用pip:pip uninstall packagename。
|
||
- 另一种方法:pip uninstall -r requirements.txt卸载在requirements.txt中列出的所有包。
|
||
- 使用virtualenv:
|
||
- virtualenv是一个工具,用于创建隔离的Python环境。它创建一个在自己的目录树中包含所有必要的可执行文件,以使用指定版本的Python运行Python项目所需的包。
|
||
- 原始的virtualenv工具可以通过
|
||
- pip install virtualenv
|
||
- 来安装。
|
||
|
||
## 练习:第20天
|
||
|
||
1. 阅读关于虚拟环境的更多信息,尝试创建虚拟环境并安装至少一个包
|
||
|
||
2. 使用一个国家API,获取所有国家信息,并找出前十个人口最多的国家
|
||
|
||
3. 从国家API数据中找出官方语言是英语(eng)的所有国家
|
||
|
||
4. 从国家API数据中获取数据,根据国家的面积找出前十个最大的国家
|
||
|
||
5. 从国家API数据中找出所有从新列出的国家,按他们的首都排序
|
||
|
||
🎉 恭喜!🎉
|
||
|
||
[<< 第 19 天](./19_file_handling_cn.md) | [第 21 天 >>](./21_classes_and_objects_cn.md) |