干货!Python 包的依赖管理,有解了!

Python之离线安装第三方库(依赖包) 离线安装Python第三方库(依赖包)。 阅读详情

前言

之前一直比较抵触用 Python ,很大一部分原因是觉得 Python 项目的环境管理比较混乱。Node.js 有 Npm 包管理工具,通过 package.json 配置项目依赖,最多再通过 nvm 来进行环境切换;Java 有 Maven Gradle 来进行包管理和项目依赖配置,并体现在 pom.xml 和 build.gradle 等中。而 Python 相比编程语言有时更体现了脚本语言的特性,系统化和标准化程度都不太高。很多 Python 项目上来就是怼代码,没有声明依赖、配置环境的文件。这样的好处是简单项目堆砌起来非常快,但是一旦代码量上了规模,依赖管理、环境配置、项目启动等就到处都是坑。

可是稍微了解了一下后发现其实 Python 不止能当脚本语言来用。基于一定的工具链,Python 也能写出漂亮标准的项目代码、将环境和依赖理的明明白白。

基于PIP

最基础的依赖管理应当能解决如下问题:

  1. 能快速配置好项目依赖,搭建好开发环境。

  2. 明确知道当前项目依赖了哪些第三方的包,以及他们的依赖树。

  3. 能快速添加和移除给定的依赖,进行依赖调解。

这些功能使用 Pip 工具链其实是能很方便做到的。

快速配置环境(pip)

想简单预览当前环境下的依赖包可以直接用 pip list 命令:

$ pip list  
Package    Version  
---------- -------------------  
certifi    2020.6.20  
pip        19.3.1  
setuptools 44.0.0.post20200106  
wheel      0.36.2  

对于一个空的 Python 环境,基础一般只会有这四个包。我们这样就知道了当前环境中有哪些包,以及他们的版本。

为了方便说明,我们先多引一些依赖 pip install flask 。

$ pip list  
Package      Version  
------------ -------------------  
certifi      2020.6.20  
click        7.1.2  
Flask        1.1.2  
itsdangerous 1.1.0  
Jinja2       2.11.3  
MarkupSafe   1.1.1  
pip          19.3.1  
setuptools   44.0.0.post20200106  
Werkzeug     1.0.1  
wheel        0.36.2  

安装了 Flask 之后,我们发现除了 Flask 他还多引入了好多个间接依赖。

如果想要将这个信息记录下来,我们可以用 pip freeze 命令,记在 requirements.txt 中(一个约定俗成的名字)。

$ pip freeze > requirements.txt  
$ cat requirements.txt  
certifi==2020.6.20  
click==7.1.2  
Flask==1.1.2  
itsdangerous==1.1.0  
Jinja2==2.11.3  
MarkupSafe==1.1.1  
Werkzeug==1.0.1  

好了,记下这个文件,以后我们如果需要在一个新的 Python 环境中引入当前的依赖,只需要使用 pip install -r requirements.txt 即可。

明确项目依赖(pipdeptree)

pip list 或 pip freeze 打印出来的依赖有一个问题,就是并没有明确依赖关系。这样的坏处是,当我们想清理依赖的时候,就不知道到底哪些依赖是能被直接删除的、哪些依赖又是被间接依赖而不能轻易删除的。

例如我们可能在项目中用了 Flask ,但是我们可能不知道 Flask 也引用了 Jinja2 。这是我们如果擅自删除了 Jinja2 ,项目就可能跑不起来。。。

这时就可以使用 pipdeptree 工具来管理依赖树:

$ pip install pipdeptree  
...  
$ pipdeptree  
certifi==2020.6.20  
Flask==1.1.2  
  - click [required: >=5.1, installed: 7.1.2]  
  - itsdangerous [required: >=0.24, installed: 1.1.0]  
  - Jinja2 [required: >=2.10.1, installed: 2.11.3]  
    - MarkupSafe [required: >=0.23, installed: 1.1.1]  
  - Werkzeug [required: >=0.15, installed: 1.0.1]  
pipdeptree==2.0.0  
  - pip [required: >=6.0.0, installed: 19.3.1]  
setuptools==44.0.0.post20200106  
wheel==0.36.2  

现在我们就知道了,原来 Jinja2 是被 Flask 依赖的,这样我们就不会随便删除了。。。

项目依赖治理(pip-autoremove)

那么问题来了,如果我忽然不想依赖 Flask 了,我们需要怎么做呢?

无脑的做法是 pip uninstall flask -y 。不那么显然的是,这其实不够优雅:

$ pip uninstall flask -y  
...  
$ pipdeptree  
certifi==2020.6.20  
click==7.1.2  
itsdangerous==1.1.0  
Jinja2==2.11.3  
  - MarkupSafe [required: >=0.23, installed: 1.1.1]  
pipdeptree==2.0.0  
  - pip [required: >=6.0.0, installed: 19.3.1]  
setuptools==44.0.0.post20200106  
Werkzeug==1.0.1  
wheel==0.36.2  

发现没,Flask 虽然被卸载了,但是他的依赖包并没有卸载干净。你可能需要重新一个一个判断你是否需要剩下的包,然后再递归删除。。。

幸运的是,我们就可以用 pip-autoremove 工具来做这件事。我们重新安装Flask,再用这个工具删除试试:

$ pip install flask  
$ pip install pip-autoremove  
$ pip-autoremove flask -y  
$ pipdeptree  
certifi==2020.6.20  
pip-autoremove==0.9.1  
pipdeptree==2.0.0  
  - pip [required: >=6.0.0, installed: 19.3.1]  
setuptools==44.0.0.post20200106  
wheel==0.36.2  

这下干净了😊。

基于Conda

pip 能基本解决单一项目的环境处理问题。但是由于 Python 是全局环境,如果有多个项目,我们就无法区分项目维度的依赖。解决这个问题一般有两个思路,一个是像 Node.js 一样用 package.json 配置文件支持项目维度的环境隔离,另一个就是走 rvm、nvm的思路用虚拟环境隔离。目前看 Python 只能支持后者,也就是用基于 Conda 的虚拟环境。

值得一提的是,conda 虽然为Python 而生,但他其实是一个通用的虚拟环境工具。他的官网写的很清楚:

Package, dependency and environment management for any language—Python, R, Ruby, Lua, Scala, Java, JavaScript, C/ C++, FORTRAN

Conda is an open-source package management system and environment management system that runs on Windows, macOS, and Linux. Conda quickly installs, runs, and updates packages and their dependencies. Conda easily creates, saves, loads, and switches between environments on your local computer. It was created for Python programs but it can package and distribute software for any language.

很强大,有多强大,可以将不同语言的依赖环境整合在一起的强大。

安装

Conda 官网给了两个发行版本,一个是 Anaconda ,一个是 Miniconda。Anaconda 相比 Miniconda 主要是多预装了很多科学计算的库,而我更喜欢按需使用不喜欢全家桶,所以我选 Miniconda。

官网下载miniconda3,并执行安装脚本。

安装后会发现 .bashrc 下多了几行:

# >>> conda initialize >>>  
# !! Contents within this block are managed by 'conda init' !!  
__conda_setup="$('/home/zhenping/miniconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"  
if [ $? -eq 0 ]; then  
    eval "$__conda_setup"  
else  
    if [ -f "/home/zhenping/miniconda3/etc/profile.d/conda.sh" ]; then  
        . "/home/zhenping/miniconda3/etc/profile.d/conda.sh"  
    else  
        export PATH="/home/zhenping/miniconda3/bin:$PATH"  
    fi  
fi  
unset __conda_setup  
# <<< conda initialize <<<  

重新登录,或着手动执行 source ~/.bashrc ,以加载conda命令。

现在就会发现提示符前多了默认环境 (base),表示当前启用了默认环境 base 。

如果不想在会话启动时就开启conda环境,就执行 conda config --set auto_activate_base false 。

环境操作

创建一个纯净的 Python2.7 环境,名字姑且叫 frida ,并激活该环境。

$ conda create -n frida python=2.7 -y  
...  
$ conda activate frida  

需要注意的是,创建环境之后,一定要 activate 该环境,否则后续的 install 操作还是在 base 环境。。。

查看已有环境列表:

(frida) $ conda env list  
# conda environments:  
#  
base                     /home/myths/miniconda3  
frida                 *  /home/myths/miniconda3/envs/frida  

查看当前环境下的依赖:

(frida) $ conda list  
# packages in environment at /home/myths/miniconda3/envs/frida:  
#  
# Name                    Version                   Build  Channel  
_libgcc_mutex             0.1                        main  
ca-certificates           2021.4.13            h06a4308_1  
certifi                   2020.6.20          pyhd3eb1b0_3  
libffi                    3.3                  he6710b0_2  
libgcc-ng                 9.1.0                hdf63c60_0  
libstdcxx-ng              9.1.0                hdf63c60_0  
ncurses                   6.2                  he6710b0_1  
pip                       19.3.1                   py27_0  
python                    2.7.18               h15b4118_1  
readline                  8.1                  h27cfd23_0  
setuptools                44.0.0                   py27_0  
sqlite                    3.35.4               hdfb4753_0  
tk                        8.6.10               hbc83047_0  
wheel                     0.36.2             pyhd3eb1b0_0  
zlib                      1.2.11               h7b6447c_3  

我们发现,与 pip list 只展示 Python 包不同,conda list 还展示了对其他语言项目代码的依赖。

退出环境:

(frida) $ conda deactivate  

这里需要注意,conda 的环境是可以默认嵌套两层的,因此 deactivate 的时候要看清楚了,可能要 deactivate 两次才能真正退出 Conda 。

依赖管理

Conda 也有和 pip freeze 类似的依赖管理方式:

为当前环境创建配置文件:

(frida) $ conda env export > environment.yaml  
(frida) $ cat environment.yaml  
name: frida  
channels:  
  - defaults  
dependencies:  
  - _libgcc_mutex=0.1=main  
  - ca-certificates=2021.4.13=h06a4308_1  
  - certifi=2020.6.20=pyhd3eb1b0_3  
  - libffi=3.3=he6710b0_2  
  - libgcc-ng=9.1.0=hdf63c60_0  
  - libstdcxx-ng=9.1.0=hdf63c60_0  
  - ncurses=6.2=he6710b0_1  
  - pip=19.3.1=py27_0  
  - python=2.7.18=h15b4118_1  
  - readline=8.1=h27cfd23_0  
  - setuptools=44.0.0=py27_0  
  - sqlite=3.35.4=hdfb4753_0  
  - tk=8.6.10=hbc83047_0  
  - wheel=0.36.2=pyhd3eb1b0_0  
  - zlib=1.2.11=h7b6447c_3  
prefix: /home/myths/miniconda3/envs/frida  

根据配置文件复现当前环境:

$ conda env create -f environment.yaml  

IDE集成

使用 conda 还有个很大的好处就是和 IDE 可以非常方便的集成。

一些思考

用Conda做其他语言的虚拟环境方便么?

现在看起来非常方便,几乎所有需要区分全局环境的地方都可以用。比如 Java 环境:

$ conda create -n java8  
$ conda activate java8  
$ conda install openjdk=8.0.152 -y  
$ conda list  
# packages in environment at /home/myths/miniconda3/envs/java8:  
#  
# Name                    Version                   Build  Channel  
openjdk                   8.0.152              h7b6447c_3  

同时,我们也可以在这个环境中集成 Node 环境,Python 环境,Ruby环境,甚至集成一些 curl、wget 等常用命令,非常方便。这对于一些跨语言、跨环境项目的环境搭建可是太有帮助了。。。

如何找conda支持的包呢?

可以直接用 conda search xxx 来搜索。不过这样可能不太全,我们也可以在 https://anaconda.org/search?q=openjdk 这里根据关键字搜索,当然也可以向这里贡献。

安装 Python 包是用 conda 好还是用 pip 好?

如果明确是纯粹的 python 包,还是建议用 pip install 安装,方便用 pip 统一管理。对于跨语言的、或者是本身就整合了各种依赖的环境(比如 tenserflow),再考虑用 conda install。

学习资源推荐

除了上述分享,如果你也喜欢编程,想通过学习Python获取更高薪资,这里给大家分享一份Python学习资料。

这里给大家展示一下我进的兼职群和最近接单的截图

私单

😝朋友们如果有需要的话,可以 V扫描下方二维码联系领取,也可以内推兼职群哦~

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

一、Python学习路线

image-20230619144606466

python学习路线图1

二、Python基础学习
1. 开发工具

2. 学习笔记

在这里插入图片描述

3. 学习视频

在这里插入图片描述

三、Python小白必备手册

图片

四、数据分析全套资源

在这里插入图片描述

五、Python面试集锦
1. 面试资料

在这里插入图片描述

在这里插入图片描述

2. 简历模板

在这里插入图片描述

因篇幅有限,仅展示部分资料,添加上方即可获取👆

------ 🙇‍♂️ 本文转自网络,如有侵权,请联系删除 🙇‍♂️ ------
如何管理 Python 依赖项 本文讨论如何管理 Python 依赖项。我们将演示如何使用流行的 pip 工具来管理 Python 中的依赖关系。如果 pip 不能满足您的使用需求,我们还将推荐一些替代方案。以及如何检测python项目中的漏洞 阅读详情

相关推荐

python学习必备精选文章50篇:依赖管理、模块与包

在如今这个时间和知识都是碎片化的时代,C站根据C1-C4认证的成长路径,进行知识细化整理,形成系统化的知识图谱。 通过调研一线互联网大厂的招聘JD,小编对标C站能力认证要求,为大家整理了系列技术干货合集,助力小伙伴们顺利进大厂~ 小编根据C4认证的成长路径整理了python的相关资源,从零基础带你进入python的世界。 欢迎大家扫描文末二维码,一起学习~ 一、依赖管理 【Python依赖管理】 【Python依赖管理那点事】 【Python依赖管理和打包工具poetry】 【py.

优快云能力认证官方博客 495

Python的5个包管理系统

Python的5个包管理系统

派森的博客 1766

Python包选型避坑指南:拒绝银弹思维

Python包生态高度场景化且持续演进,不存在适用于所有任务的‘终极清单’。理解包的底层原理(如I/O模型、内存管理、类型系统)是合理选型的前提;技术价值体现在可维护性、性能边界与团队协作效率;典型应用场景包括数据清洗、模型服务化、边缘部署与教学验证等。盲目依赖营销式‘必备20库’标题,易导致架构失配、升级受阻与原理脱节——本文聚焦真实工程约束下的Python包评估框架与决策路径。

weixin_30340819的博客 337

python依赖包的安装(python小白初学者必看教程)pip, python库安装,python依赖库认识(安装pandas、request 等库都可用)内网安装python依赖

python依赖包的安装(python小白初学者必看教程)pip, python库安装,python依赖库认识(安装pandas、request 等库都可用)内网安装python依赖

qq_44218507的博客 2万+

Python项目依赖项管理的秘诀:requirements.txt文件

使用requirements.txt文件,可以确保你的项目在不同的开发环境中运行一致,并且可以简化项目的部署和维护!

程序员小杨哥的博客 3381

Python 3.7 环境下安装 safetensors 依赖时出现版本不兼容及找不到 puccinialin 包的问题,如何解决?

🏆本文收录于 《全栈Bug调优(实战版)》 专栏,该专栏专注于分享我在真实项目开发中遇到的各类疑难Bug及其深层成因,并系统提供高效、可复现的解决思路和实操方案。无论你是刚入行的新手开发者,还是拥有多年项目经验的资深工程师,本专栏都将为你提供一条系统化、高质量的问题排查与优化路径,助力你加速成长,攻克技术壁垒,迈向技术价值最大化与职业发展的更高峰🚀!

**My Coding Family** 2072

【稀缺实战干货】:企业级Python项目依赖管理的10条黄金法则

掌握企业级Python项目依赖管理难题,本文详解10条黄金法则,涵盖虚拟环境隔离、版本锁定与Python依赖管理工具选型等核心方法,适用于微服务、CI/CD等复杂场景,提升项目稳定性与可维护性,值得收藏。

LogicNest的博客 1004

Python安装第三方包的N种方式

先铺个底,系统包管理器是操作系统自带或常用的工具,用来管理软件包的安装、更新和卸载。比如在Ubuntu或Debian系统上,(或者老版本的apt-get)是标配;CentOS或RHEL系的Linux则常用或者更新的;而macOS用户大多会装个,简称,来管理各种软件。它们的本职工作是安装系统级软件,比如编译器、数据库服务啥的,但很多包管理器也维护了Python包的仓库,可以直接用来安装Python的库。

大模型大数据攻城狮的专栏 904

如何构建自己的Python包

在日常开发中,我们经常会把一些通用的函数、类或者模块抽取出来,以便在不同的项目中复用。我使用的是 devcontainer 作为开发环境,可以用 VSCode 远程到 Linux 并配置 devcontainer,可以解决环境本身,可以随时更换 Python 版本,还能解决多人协作开发时,环境配置不一致的问题。在运维开发中,如果有多项目的需求,基本都是需要公共库的,否则需要被多项目调用的模块要重复编写,复制到其他项目非常不方便,并且难以保证代码质量,所以非常推荐编写自己或团队的公共代码库。

NewTyun的博客 732

abaqus wcm插件下载_Abaqus随机短纤维增强复合材料建模插件

文末附Abaqus随机短纤维增强复合材料建模插件下载链接前言短纤维增强复合材料相对于长纤维增强复合材料来说更容易制备,且短纤维的填充性能略有改善,可制造复杂产品,广泛应用于车辆、航空航天、建筑等行业,对短纤维增强复合材料进行细观力学分析,可对其宏观力学性能进行预测、分析破坏机理等。接下来对随机短纤维增强复合材料建模插件进行介绍。NO.1 【算法简介】难点一:此插件核心在于判断生成的纤维是...

weixin_39974882的博客 2833

工业预测模型避坑指南:PHM2012轴承数据实战中,LSTM、CNN、Transformer到底怎么选?

本文深入探讨了工业预测模型在PHM2012轴承数据下的选型策略,对比了LSTM、CNN和Transformer等主流模型在轴承寿命预测任务中的表现。通过真实实验数据,提供了可复现的选型决策框架,帮助工程师根据数据规模、硬件条件和精度要求选择最佳模型。文章还揭示了工程落地中的隐藏陷阱,如数据不均衡和工况迁移挑战,并提出了解决方案。

weixin_33694172的博客 493

全部第三方包 卸载python_Python界虚拟环境第三把神器,你不知道就out啦!

点击上方“菜鸟学Python”,选“星标”公众号重磅干货,第一时间送达众所周知,Python 因为有着强大的第三方包扩展,所以开发应用非常的便捷,但是不同包的版本依赖问题是一个很头痛的问题,为此 Python 出现了各种环境管理工具,通过它们我们可以隔离出一个独立的 Python 环境,也就是不同项目采用不同的环境。Python 界常见的虚拟环境管理工具有 virtualenv 和 pi...

weixin_42623010的博客 300

Nginx反向代理HTTPS服务报错排查:The plain HTTP request was sent to HTTPS port

在Web服务架构中,反向代理是连接客户端与后端应用的关键组件,它通过转发请求实现负载均衡和安全隔离。其工作原理涉及监听端口、解析协议头部,并根据配置将请求路由至上游服务器。这一机制的技术价值在于提升系统可扩展性、简化部署,并增强安全性。在HTTPS场景下,代理服务器需正确处理SSL/TLS终止与传递,若配置不当,常引发协议不匹配问题。例如,当Nginx将解密后的HTTP请求转发至期待HTTPS的后端,或客户端直接向SSL端口发送明文请求时,便会出现经典报错“The plain HTTP request wa

weixin_33391446的博客 402

pycharm python 依赖管理_免费好用的Python编辑器IDE,拿走不谢!

1.pycharmPyCharm是专为python 开发的IDE工具,提供了诸多功能以帮助程序员提升开发效率,比如代码调试、语法高亮、代码跳转、自动完成、智能提示等。Pycharm分为商业版和社区版,商业版是收费的,社区版面向的是python社区的学习人员,其提供的功能与商业版并无太大区别,一般来说,使用社区版即可满足绝大部分程序员的开发需求。pycharm社区版的下载页面:https://www...

weixin_39634884的博客 510

OpenEuler内核编译及替换

一、内核源码下载 在gitee上下载OpenEuler内核源码 下载地址 选择需要的内核版本源码压缩包进行下载 二、内核编译 1.解压缩 将下载好的源码进行解压 tar xvf openeuler-kernel-4.19.90-2107.1.0.tar.gz 2.清理源代码树 解压后得到一个名为kernel的内核源码文件夹,进入后执行命令 make mrproper 清理过去内核编译产生的config,第一次编译时可不执行此命令 3.生成内核配置文件.config 先将将系统原配置文件拷贝过来,原

m0_56602092的博客 2万+

企业华为TaurusDB数据库国产替代要点全记录

国产化数据库全方位对比、从互联网企业的先进经验来看mysql的用法、及sql优化、sql异构修改、及数据同步方面都做了一些讲解

深耕互联网的码农,在AI及国产化浪潮下,希望把自己的能力输出给更多的人 1064

年中汇总干货文章集合(Python)

咪哥杂谈本篇阅读时间约为 3 分钟。1前言已经到 9102 年年中了,来篇汇总文章集合。汇总整理下过去半年写过的 Python 相关干货文章。2文章汇总集合1. 零基础如...

咪哥杂谈 273

GNSS-RTK/INS紧组合里,那个‘杆臂改正’到底怎么算?一个公式讲清INS与天线位置的关系

本文深入解析GNSS-RTK/INS紧组合导航系统中的杆臂改正(Lever Arm Correction)原理与实现方法。详细介绍了杆臂效应的物理本质、数学建模及误差扰动分析,揭示了IMU与GNSS天线位置关系的核心公式,并提供了工程实现中的常见误区与验证方法。通过Python代码示例和紧组合量测模型处理流程,帮助开发者准确理解并应用这一关键技术。

weixin_33137081的博客 357

【多喝热水系列】从零开始的ROS2之旅——Day5 再遇ROS2功能包:Python和C++功能包编写

本文介绍了ROS2中Python和C++功能包的创建与编译流程。主要内容包括:1) 创建Python功能包并配置setup.py和packages.xml;2) 创建C++功能包并配置CMakeLists.txt;3) 将多个功能包整合到工作空间处理依赖关系;4) 解决Ubuntu卡登录界面的问题。文章通过详细步骤和截图演示了功能包的创建、编译和验证过程,为ROS2开发打下基础。后续将介绍节点通信等更深入的内容。

2401_83080774的博客 1117

高通平台Android 无线 UWB 开发全解析:UWB系统设计、天线与校准全流程指南

为使 UWB 系统达到目标性能,在整个开发流程中遵循一套设计最佳实践至关重要。系统架构:需基于飞行时间(ToF)功能的基准方案(POR)定义系统框图,这是整体系统架构的基础。天线布局:天线位置对性能影响极大,需尽可能贴近 UWB 芯片,以减少信号损耗、保持高传输效率。器件选型:需谨慎选择元器件,推荐使用单刀双掷(SPDT)或双刀双掷(DPDT)开关、UWB 带通滤波器射频同轴测试接头,以保障信号传输路径与测试能力。原理图优化:原理图开发阶段,走线损耗优化极为关键。

专业开发者的博客,一个从事Android WiFi和蓝牙的工程师 171

Unity-Mirror网络框架-从入门到精通之Mirror简介

在现代游戏开发中,网络功能日益成为提升游戏体验的关键组成部分。Mirror是一个用于Unity的开源网络框架,专为多人游戏开发设计。它使得开发者能够轻松实现网络连接、数据同步和游戏状态管理。本文将深入介绍Mirror的基本概念、如何与其他网络框架进行比较,以及如何从零开始创建一个使用Mirror的简单网络项目。Mirror是一个功能强大的Lite网络框架,旨在替代Unity的UNet网络解决方案。它提供了高效的多玩家架构、简单易用的API,以及良好的社区支持。

TxNet 3098

学习笔记——python版本管理神器miniconda安装以及使用指南,纯干货!

Miniconda简介 Miniconda是一款小巧的python环境管理工具,安装包大约只有50M多点,其安装程序中包含conda软件包管理器和Python。一旦安装了Miniconda,就可以使用conda命令安装任何其他软件工具包并创建环境等。本文是在Windows 10系统下进行下载和安装。这个虚拟环境是比较好用的 下载 可以进入miniconda的官网下载,也可通过以下链接直接进入下载页面。下载版本最好选择python3的64位版本,即Miniconda3 Windows 64-bit,(.

weixin_51130521的博客 6274

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

python | tox,一个超强的 自动化测试工具 Python 库!

可以在tox.ini中定义自定义的测试命令。[testenv]commands =tox库是一个功能强大且易于使用的自动化测试工具,能够帮助开发者高效地管理和运行多环境测试。通过支持多环境测试、依赖管理、配置文件驱动、扩展性强和并行测试等特性,tox库能够满足各种测试需求。本文详细介绍了tox库的安装方法、主要特性、基本和高级功能,以及实际应用场景。希望本文能帮助大家全面掌握tox库的使用,并在实际项目中发挥其优势。无论是在持续集成、开源项目、本地开发还是依赖冲突检测中,tox库都将是一个得力的工具。

csdn_xmj的博客 2142

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

上一篇: Python 面向对象编程语言
下一篇: 用Python实现自动扫雷!
大模型应用场景
博客等级 码龄5年 7670粉丝 1350原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值