一、
在使用 Python 3.6 开发时,通常会安装一些常用的 Python 包,这些包涵盖了各种功能,如网络请求、数据处理、科学计算、数据库操作、Web 开发等。以下是一些常用的 Python 包:
1. 网络请求和 API 交互
-
requests:用于发送 HTTP 请求,处理 API 交互。
pip install requests
-
httpx:支持异步 HTTP 请求的库,功能比
requests
更强大。pip install httpx
2. 数据处理
-
pandas:强大的数据处理和分析库,常用于处理表格数据。
pip install pandas
-
numpy:用于数值计算的库,提供高效的数组操作和数学函数。
pip install numpy
-
matplotlib:绘制图表和可视化数据的库。
pip install matplotlib
-
scipy:用于科学计算和数值分析,扩展了
numpy
的功能。pip install scipy
3. 数据库操作
-
SQLAlchemy:用于数据库操作的 ORM 库,支持多种数据库。
pip install SQLAlchemy
-
pymysql:用于与 MySQL 数据库交互的库。
pip install pymysql
-
psycopg2:用于与 PostgreSQL 数据库交互的库。
pip install psycopg2
-
sqlite3:Python 标准库自带的 SQLite 数据库接口,无需安装。
4. Web 开发
-
Django:一个强大的 Web 框架,适合快速开发 Web 应用。
pip install django
-
Flask:轻量级 Web 框架,适合构建小型 Web 应用或微服务。
pip install flask
-
fastapi:用于构建现代 Web API 的快速框架,支持异步编程。
pip install fastapi
5. 测试
-
pytest:一个功能强大的测试框架,支持单元测试、功能测试等。
pip install pytest
-
unittest:Python 标准库自带的测试框架,无需安装。
6. 虚拟环境管理
-
virtualenv:创建隔离的 Python 环境,管理项目依赖。
pip install virtualenv
-
pipenv:结合了
pip
和virtualenv
的功能,用于管理项目依赖和虚拟环境。pip install pipenv
7. 日志和调试
-
loguru:用于日志记录的库,简化了 Python 中的日志处理。
pip install loguru
-
ipdb:交互式调试器,基于
pdb
,提供更友好的调试体验。pip install ipdb
8. 并行和异步编程
-
concurrent.futures:标准库中自带的并发编程模块,无需安装。
-
asyncio:用于编写异步代码的标准库模块,无需安装。
-
celery:一个异步任务队列库,适合处理分布式任务。
pip install celery
9. 机器学习和人工智能
-
scikit-learn:用于机器学习的库,包含常用的算法和工具。
pip install scikit-learn
-
tensorflow:谷歌开发的深度学习框架,广泛用于神经网络和深度学习研究。
pip install tensorflow
-
keras:一个高级神经网络 API,运行在
TensorFlow
之上。pip install keras
-
pytorch:一个深度学习框架,广泛用于研究和生产环境。
pip install torch
10. 其他常用工具
-
beautifulsoup4:用于解析 HTML 和 XML 的库,常用于 Web 抓取。
pip install beautifulsoup4
-
lxml:一个快速的 HTML 和 XML 解析器。
pip install lxml
-
openpyxl:用于读写 Excel 文件的库。
pip install openpyxl
总结
根据你的开发需求,你可以选择合适的 Python 包进行安装和使用。上述列出的包涵盖了大多数常见的开发任务,可以满足绝大多数的编程需求。安装这些包可以大大提高你的开发效率。
二、
关于 pytest
相关的 Python 包,以下是一些常用的扩展包和插件,可以帮助你更好地进行测试工作。pytest
是一个非常强大且灵活的测试框架,它有很多扩展和插件,可以用于不同类型的测试需求。
1. 基础安装
首先,确保你已经安装了 pytest
:
pip install pytest
2. 常用插件
2.1 pytest-cov
:代码覆盖率报告
pytest-cov
是一个用于生成代码覆盖率报告的插件。它可以帮助你了解测试覆盖了多少代码。
pip install pytest-cov
使用方式:
pytest --cov=your_package_name
2.2 pytest-xdist
:并行测试
pytest-xdist
允许你在多个 CPU 核心或机器上并行运行测试,极大地加快了测试速度。
pip install pytest-xdist
使用方式:
pytest -n auto # 自动检测 CPU 核心数并并行运行测试
2.3 pytest-mock
:模拟对象
pytest-mock
是一个用于集成 unittest.mock
的插件,它简化了模拟对象和函数的过程,适合在测试中使用 mock 对象。
pip install pytest-mock
使用方式:
def test_function(mocker):
mock = mocker.patch('module.function')
mock.return_value = "mocked!"
assert module.function() == "mocked!"
2.4 pytest-django
:Django 测试集成
pytest-django
是 Django 项目的一个插件,提供了对 Django 测试框架的无缝集成。
pip install pytest-django
使用方式:
在你的项目根目录下创建 pytest.ini
文件,并添加 Django 的设置:
[pytest]
DJANGO_SETTINGS_MODULE = your_project.settings
然后运行 pytest
,它会自动识别 Django 测试。
2.5 pytest-asyncio
:异步测试
pytest-asyncio
用于测试异步代码的插件,它可以让你在 pytest
中轻松编写和运行 async
/await
测试。
pip install pytest-asyncio
使用方式:
import pytest
import asyncio
@pytest.mark.asyncio
async def test_async_function():
await asyncio.sleep(1)
assert True
2.6 pytest-html
:生成 HTML 测试报告
pytest-html
可以帮助你生成详细的 HTML 测试报告,适合在测试结果需要以报告形式展示的情况下使用。
pip install pytest-html
使用方式:
pytest --html=report.html
2.7 pytest-flask
:Flask 测试集成
pytest-flask
是 Flask 项目的一个插件,简化了 Flask 应用程序的测试过程。
pip install pytest-flask
使用方式:
import pytest
from myapp import create_app
@pytest.fixture
def app():
app = create_app()
return app
def test_home_page(client):
response = client.get('/')
assert response.status_code == 200
2.8 pytest-faker
:生成假数据
pytest-faker
提供了 faker
库的集成,可以在测试中轻松生成假数据。
pip install pytest-faker
使用方式:
def test_with_faker(faker):
name = faker.name()
assert isinstance(name, str)
2.9 pytest-bdd
:行为驱动开发(BDD)
pytest-bdd
支持行为驱动开发(BDD),可以让你使用类似 Gherkin 的语法编写测试。
pip install pytest-bdd
使用方式:
from pytest_bdd import scenario, given, when, then
@scenario('test.feature', 'Test scenario')
def test_scenario():
pass
@given('some initial condition')
def initial_condition():
pass
@when('an action is performed')
def perform_action():
pass
@then('a result is expected')
def expected_result():
pass
3. 其他有用的插件
-
pytest-randomly
:随机化测试执行顺序,帮助发现潜在的依赖问题。pip install pytest-randomly
-
pytest-timeout
:为测试用例设置超时时间,防止测试无限制地运行。pip install pytest-timeout
-
pytest-sugar
:美化pytest
的输出,使测试结果更易读。pip install pytest-sugar
4. 常用的测试实用工具
-
hypothesis
:基于属性的测试工具,可以生成各种测试数据,帮助发现隐藏的 bug。pip install hypothesis
-
tox
:用于自动化测试的工具,可以在多个 Python 环境中运行测试。pip install tox
总结
pytest
是一个强大的测试框架,配合各种插件可以处理从简单单元测试到复杂的异步测试、Web 测试和 BDD 测试等各种需求。- 常用的插件如
pytest-cov
、pytest-xdist
和pytest-mock
等可以增强pytest
的功能。
这些插件可以根据你的项目需求进行选择和安装,从而构建一个强大的测试环境。
三、
在 CentOS 系统中同时存在 Python 2 和 Python 3 的情况下,通常需要区分 pip
命令,以确保安装的模块与正确的 Python 版本对应。默认情况下:
pip
通常与 Python 2 绑定,即pip
安装的包会被安装到 Python 2 的环境中。pip3
通常与 Python 3 绑定,即pip3
安装的包会被安装到 Python 3 的环境中。
1. 使用 pip3
命令
要为 Python 3.6 安装模块,应该使用 pip3
命令:
pip3 install package_name
例如,安装 requests
包:
pip3 install requests
2. 指定具体的 Python 解释器
如果你不确定 pip
和 pip3
是否正确指向所需的 Python 版本,可以使用 Python 解释器直接调用 pip
模块:
python3.6 -m pip install package_name
这会确保 pip
安装的包与指定的 Python 解释器对应。
3. 手动下载和安装模块
如果你无法使用 pip
或需要手动下载并安装模块,可以通过以下方式操作:
3.1 使用 pip download
命令下载模块
在有网络连接的环境中,使用 pip
下载模块及其依赖项:
pip3 download package_name
这会将 package_name
及其依赖项下载为 .whl
或 .tar.gz
文件。
你可以使用 --no-deps
选项来仅下载特定的包,而不包括依赖项:
pip3 download --no-deps package_name
3.2 手动安装下载的模块
将下载的包传输到目标系统后,可以使用以下命令手动安装:
pip3 install package_name.whl
或者,如果你下载的是 .tar.gz
文件,可以先解压然后安装:
tar xzf package_name.tar.gz
cd package_name
python3.6 setup.py install
3.3 离线安装
如果你在离线系统上,下载好 .whl
文件或 .tar.gz
文件后,可以使用 pip
离线安装:
pip3 install package_name.whl
3.4 使用 setuptools
对于许多 Python 包,你也可以通过 setuptools
进行安装。你需要下载包的源码并解压,然后运行:
python3.6 setup.py install
4. 使用操作系统的包管理器(有限的选择)
在 CentOS 上,可以通过 yum
安装一些常见的 Python 包,但这仅适用于部分库,且大多是针对 Python 2 的:
sudo yum install python3-requests
这些包会自动安装到正确的 Python 版本中。
5. 使用 virtualenv
或 venv
创建隔离环境
如果你不希望影响系统的 Python 环境,可以使用 virtualenv
或 venv
创建一个隔离的虚拟环境,然后在其中使用 pip
安装模块:
python3.6 -m venv myenv
source myenv/bin/activate
pip install package_name
这样所有的包都会安装在虚拟环境中,而不会影响系统级 Python。
总结
- 使用
pip3
:这是为 Python 3.6 安装包的最常用方法。 - 使用 Python 解释器调用
pip
:可以确保正确的 Python 版本使用正确的pip
。 - 手动下载并安装包:适用于没有网络连接的系统。
- 创建虚拟环境:使用
venv
或virtualenv
创建隔离的环境,避免系统包冲突。
通过这些方法,你可以在 CentOS 系统上管理 Python 2 和 Python 3 的包,并确保它们互不干扰。
四、
sudo yumdownloader --resolve python3
命令的作用是下载 python3
包及其依赖项,而不会自动包含通过 pip
安装的模块。这是因为 yumdownloader
仅处理通过 yum
安装的 RPM 包,而 pip
安装的模块通常是通过 Python 包管理器从 Python Package Index (PyPI) 下载并安装的,而不是 RPM 包。
总结 yumdownloader
的行为:
- 下载
python3
及其依赖项:yumdownloader --resolve python3
会下载python3
包及其在 RPM 库中的依赖项,并保存到指定的目录中。 - 不会下载
pip
模块:pip
安装的模块不是 RPM 包的一部分,因此yumdownloader
不会下载这些模块。
如果你需要离线安装通过 pip
安装的模块
-
在联网环境中使用
pip download
下载模块:
你可以使用pip download
命令手动下载你需要的模块及其依赖项,这样可以在离线环境中使用。mkdir pip-packages pip3 download -d pip-packages requests numpy pandas
上述命令会将
requests
、numpy
、pandas
及其依赖项下载到pip-packages
目录中。 -
将
pip
模块与yumdownloader
的包一起传输:
将通过yumdownloader
和pip download
下载的所有文件一起打包,并传输到离线系统。 -
在离线系统上安装:
在离线系统上,首先使用yum localinstall
安装yumdownloader
下载的 RPM 包,然后使用pip install
命令从本地文件夹安装通过pip download
下载的包:pip3 install --no-index --find-links=pip-packages requests numpy pandas
这会从
pip-packages
目录中安装指定的模块及其依赖项,而不需要访问互联网。
总结
yumdownloader
仅下载yum
包及其依赖项,不包括pip
安装的模块。- 要离线安装
pip
模块,你需要使用pip download
手动下载这些模块及其依赖项。 - 将通过
yumdownloader
和pip download
下载的包一起传输到离线系统,并分别使用yum localinstall
和pip install
命令安装。
通过这种方法,你可以在离线环境中完整地安装 Python 及其依赖项和模块。
五、
python3.6 -m pip install pytest
WARNING: Running pip install with root privileges is generally not a good idea. Try main.py install --user instead.
Collecting pytest
Downloading https://files.pythonhosted.org/packages/38/93/c7c0bd1e932b287fb948eb9ce5a3d6307c9fc619db1e199f8c8bc5dad95f/pytest-7.0.1-py3-none-any.whl (296kB)
20% |██████▋ | 61kB 3.5kB/s eta 0:01:08Exception:
Traceback (most recent call last):
File “/usr/lib/python3.6/site-packages/pip/_vendor/urllib3/response.py”, line 302, in _error_catcher
yield
File “/usr/lib/python3.6/site-packages/pip/_vendor/urllib3/response.py”, line 384, in read
data = self._fp.read(amt)
File “/usr/lib/python3.6/site-packages/pip/_vendor/cachecontrol/filewrapper.py”, line 60, in read
data = self.__fp.read(amt)
File “/usr/lib64/python3.6/http/client.py”, line 459, in read
n = self.readinto(b)
File “/usr/lib64/python3.6/http/client.py”, line 503, in readinto
n = self.fp.readinto(b)
File “/usr/lib64/python3.6/socket.py”, line 586, in readinto
return self._sock.recv_into(b)
File “/usr/lib64/python3.6/ssl.py”, line 1005, in recv_into
return self.read(nbytes, buffer)
File “/usr/lib64/python3.6/ssl.py”, line 867, in read
return self._sslobj.read(len, buffer)
File “/usr/lib64/python3.6/ssl.py”, line 590, in read
v = self._sslobj.read(len, buffer)
socket.timeout: The read operation timed out
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File “/usr/lib/python3.6/site-packages/pip/basecommand.py”, line 215, in main
status = self.run(options, args)
File “/usr/lib/python3.6/site-packages/pip/commands/install.py”, line 346, in run
requirement_set.prepare_files(finder)
File “/usr/lib/python3.6/site-packages/pip/req/req_set.py”, line 381, in prepare_files
ignore_dependencies=self.ignore_dependencies))
File “/usr/lib/python3.6/site-packages/pip/req/req_set.py”, line 623, in _prepare_file
session=self.session, hashes=hashes)
File “/usr/lib/python3.6/site-packages/pip/download.py”, line 821, in unpack_url
hashes=hashes
File “/usr/lib/python3.6/site-packages/pip/download.py”, line 659, in unpack_http_url
hashes)
File “/usr/lib/python3.6/site-packages/pip/download.py”, line 882, in _download_http_url
_download_url(resp, link, content_file, hashes)
File “/usr/lib/python3.6/site-packages/pip/download.py”, line 603, in _download_url
hashes.check_against_chunks(downloaded_chunks)
File “/usr/lib/python3.6/site-packages/pip/utils/hashes.py”, line 46, in check_against_chunks
for chunk in chunks:
File “/usr/lib/python3.6/site-packages/pip/download.py”, line 571, in written_chunks
for chunk in chunks:
File “/usr/lib/python3.6/site-packages/pip/utils/ui.py”, line 139, in iter
for x in it:
File “/usr/lib/python3.6/site-packages/pip/download.py”, line 560, in resp_read
decode_content=False):
File “/usr/lib/python3.6/site-packages/pip/_vendor/urllib3/response.py”, line 436, in stream
data = self.read(amt=amt, decode_content=decode_content)
File “/usr/lib/python3.6/site-packages/pip/_vendor/urllib3/response.py”, line 401, in read
raise IncompleteRead(self._fp_bytes_read, self.length_remaining)
File “/usr/lib64/python3.6/contextlib.py”, line 99, in exit
self.gen.throw(type, value, traceback)
File “/usr/lib/python3.6/site-packages/pip/_vendor/urllib3/response.py”, line 307, in _error_catcher
raise ReadTimeoutError(self._pool, None, ‘Read timed out.’)
pip._vendor.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(host=‘files.pythonhosted.org’, port=443): Read timed out.
这个错误表明 pip
在尝试下载 pytest
包时,出现了网络连接超时的问题。这通常是由于网络不稳定、下载速度慢或其他网络问题导致的。为了绕过这个问题,你可以尝试以下几种方法:
1. 增加 pip
的超时时间
你可以通过设置 --timeout
参数来增加 pip
的超时时间。例如,将超时时间设置为 100 秒:
python3.6 -m pip install pytest --timeout 100
2. 使用国内镜像源
如果你在中国大陆地区,默认的 pip
下载源速度可能较慢,可以尝试使用国内的镜像源,例如:
- 阿里云:
https://mirrors.aliyun.com/pypi/simple/
- 清华大学:
https://pypi.tuna.tsinghua.edu.cn/simple/
你可以使用以下命令指定镜像源下载 pytest
:
python3.6 -m pip install pytest -i https://mirrors.aliyun.com/pypi/simple/
或者
python3.6 -m pip install pytest -i https://pypi.tuna.tsinghua.edu.cn/simple/
3. 使用 --user
选项安装
pip
提示你使用 --user
选项安装软件包,这样可以避免使用 root 权限进行安装,从而减少潜在的系统权限问题:
python3.6 -m pip install pytest --user
4. 手动下载并离线安装
你可以在网络状况良好的环境中手动下载 pytest
包,然后将其传输到你的目标系统进行离线安装。
4.1 手动下载 pytest
在有网络的系统上,使用以下命令下载 pytest
及其依赖项:
pip3 download pytest
这会下载所有需要的 .whl
文件到当前目录。
4.2 将文件传输到目标系统
将下载的文件传输到需要安装的系统上。
4.3 离线安装
在目标系统上使用以下命令安装 pytest
:
python3.6 -m pip install pytest --no-index --find-links=/path/to/downloaded/files
将 /path/to/downloaded/files
替换为你下载的文件所在的目录路径。
5. 检查网络连接
确保你的网络连接正常,特别是在你使用的是虚拟机或远程连接的情况下,检查是否存在网络问题或防火墙配置问题。
总结
- 尝试增加
pip
的超时时间,或者使用国内的镜像源下载。 - 通过手动下载
pytest
并进行离线安装,避免网络问题。 - 检查网络连接,确保其稳定性。
通过这些方法,你应该可以绕过 pip
下载超时的问题,并成功安装 pytest
。
七、
Allure
是一个非常流行的测试报告框架,它可以与 pytest
、JUnit
、TestNG
等多种测试框架集成,生成美观且详细的测试报告。如果你正在使用 pytest
进行测试,可以使用 allure-pytest
插件来生成 Allure 格式的测试报告。
以下是与 Allure 相关的模块和工具的介绍,以及如何在 Python 项目中使用它们。
1. 安装 Allure 相关模块
1.1 安装 allure-pytest
要在 pytest
中使用 Allure 生成报告,你需要安装 allure-pytest
插件。
pip install allure-pytest
1.2 安装 Allure 命令行工具
Allure 生成的报告需要通过 Allure 命令行工具进行处理和展示。你可以从以下两种方式安装 Allure 命令行工具:
-
直接下载二进制文件:
- 访问 Allure Releases 页面。
- 下载最新版本的
allure
命令行工具包(如allure-2.13.9.zip
)。 - 解压缩下载的文件,并将
bin
目录添加到你的PATH
环境变量中。
-
使用 Homebrew(仅限 macOS 和 Linux):
如果你在 macOS 或 Linux 上工作,也可以通过 Homebrew 安装:brew install allure
1.3 验证安装
安装完成后,你可以运行以下命令来验证 Allure 是否安装成功:
allure --version
2. 使用 Allure 生成测试报告
2.1 在 pytest
中生成 Allure 报告
在运行 pytest
时,你可以使用 --alluredir
选项指定生成报告的目录:
pytest --alluredir=./allure-results
这个命令会在 ./allure-results
目录下生成一组 Allure 格式的测试结果文件。
2.2 生成 HTML 报告
使用 Allure 命令行工具将生成的测试结果转换为 HTML 报告:
allure serve ./allure-results
这个命令会启动一个本地服务器,自动在浏览器中打开生成的 Allure 报告。
如果你只想生成静态 HTML 文件而不启动服务器,可以使用以下命令:
allure generate ./allure-results -o ./allure-report
生成的报告将保存在 ./allure-report
目录中,你可以将这个目录中的文件上传到任何静态文件服务器进行展示。
3. Allure 特性
Allure 提供了丰富的特性,使得测试报告更加详细和可读。以下是一些常用的 Allure 特性:
-
步骤记录:使用
@allure.step
注解来记录测试中的步骤。import allure @allure.step("Step description") def step_function(): pass def test_example(): step_function()
-
附件:在测试失败时,自动或手动添加截图、日志等作为附件。
import allure def test_example(): with open('example.png', 'rb') as image: allure.attach(image.read(), name='Screenshot', attachment_type=allure.attachment_type.PNG)
-
标签和特性:通过
@allure.feature
和@allure.story
等标签组织和分类测试用例。import allure @allure.feature('Login') @allure.story('User Login') def test_login(): pass
-
动态标题:可以在测试执行时动态地设置测试用例的标题。
import allure def test_dynamic_title(): allure.dynamic.title("This is a dynamic title")
4. Allure 与 CI 集成
Allure 可以与 CI/CD 工具(如 Jenkins、GitLab CI 等)集成,自动生成和发布测试报告。
-
Jenkins:你可以使用 Allure Jenkins 插件来自动化生成测试报告。插件可以直接解析
allure-results
目录,并生成 Allure 报告。 -
GitLab CI:在 GitLab CI 中,可以在
.gitlab-ci.yml
中配置 Allure 生成报告并作为 CI 结果的一部分。
5. 其他有用的 Allure 插件
allure-python-commons
:这是 Allure 框架的一个核心库,allure-pytest
基于这个库构建。allure-behave
:用于与 Behave(BDD 测试框架)集成的插件。
总结
allure-pytest
:用于在pytest
中生成 Allure 报告的插件。- Allure 命令行工具:用于处理和展示 Allure 报告。
- 步骤、附件、标签和动态标题:增强 Allure 报告的可读性和详细程度。
- 与 CI 集成:可以与 Jenkins、GitLab CI 等 CI/CD 工具集成,实现自动化报告生成和展示。
通过这些工具和插件,你可以生成美观的测试报告,并提高测试结果的可视化和可读性。