当前位置: 首页 > 科技观察

PDM

时间:2023-03-21 12:07:24 科技观察

Python包管理工具前言大家好,我是小江。之前讲过一个pipenv和poetry的包管理工具。想必大家都和我一样了解过pipenv的问题,所以不推荐使用。后来改成了诗歌工具,不过这个东西对我来说有点麻烦,而且经常容易出错,虽然可以用别名的形式来做。所以今天给大家推荐一款工具,叫做PDM,全称:PythonDevelopmentMaster。它也非常好用,有兴趣的朋友可以使用。使用PDM安装#macosinstallpipxbrewinstallpipxpipxensurepath#linuxinstallpipxpython3-mpipinstallpipxpython3-mpipxensurepath使用pipx安装pdmPDM只能使用Python3.7+版本,使用其他方式安装,必须先确保你的Python版本,但是有了pipx你就不用担心了。一定要注意安装的pipx的版本和pipx安装pdm时使用的Python版本,否则pdminit会失败/plugins/pdm/_pdmvim~/.zshrcplugins=(pdmpoetrygitzsh-completionszsh-autosuggestions)source~/.zshrcpdminfoPDM初始化项目执行pdminit会开始初始化,初始化的时候会要求选择一些关于project:是否上传PyPI依赖的Python版本LicensetypeAuthorinformationEmailinformation初始化项目时会扫描本机所有Python版本,选择项目的Python版本。?mkdirpdm-demo?cdpdm-demo#重新执行pdm成功?pdminitCreatingapyproject.tomlforPDM...PleaseenterthePythoninterpretertouse0./Users/allenjol/.pyenv/versions/3.10.4/bin/python3(3.10)1。/Users/allenjol/.pyenv/versions/3.10.4/bin/python(3.10)2。/Users/allenjol/.pyenv/versions/3.10.4/bin/python3.10(3.10)3。/Users/allenjol/.pyenv/versions/3.10.4/bin/python3.10(3.10)4。/Users/allenjol/.pyenv/versions/3.10.4/bin/python3(3.10)5。/Users/allenjol/.pyenv/versions/3.10.4/bin/python(3.10)6。/Library/Frameworks/Python.framework/Versions/Current/bin/python3.10(3.10)7。/Library/Developer/CommandLineTools/usr/bin/python3(3.8)8。/Users/allenjol/.local/pipx/venvs/pdm/bin/python(3.10)请选择:[0]:8使用Python解释器:/Users/allenjol/.local/pipx/venvs/pdm/bin/python(3.10)该项目是将要上传到PyPI的库吗?[y/N]:NLicense(SPDXname)[MIT]:作者姓名[allen_jol]:作者邮箱[471733951@qq.com]:Pythonrequires('*'toallowany)[>=3.10]:Changesarewrittentopyproject.toml.#完成后,PDM会将你的选择以toml格式写入pyproject.toml配置文件?lltotal8-rw-r--r--1名allenjol员工28320年5月13:58pyproject.toml?catpyproject.toml[project]name=""version=""description=""authors=[{name="allen_jol",email="471733951@qq.com"},]dependencies=[]requires-python=">=3.10"license={text="MIT"}[tool.pdm][build-system]requires=["pdm-pep517>=0.12.0"]build-backend="pdm.pep517.api"PDM常用命令#安装packagepdmaddrequests#查看packagepdmlist#以树形形式查看pdm列表--graph#查看详情ofpackagepdmshowrequests#删除包pdmremoverequests#项目配置(可以不加任何参数打印出项目的环境配置)pdmconfig#修改pypi源pdmconfigpypi.urlhttps://img.ydisp.cn/news/20220901/jwcgyq34ozgpdmconfigpypi.url运行命令要在pdm环境下执行命令或工程,可以使用run命令。如果项目执行时参数较多,可以在pyproject.toml中配置命令别名$catmain.pyprint('Hello,pdm')$pdmrunpythonmain.pyhello,pdm查看环境pdminfo-vpdminfo--envpdminfo--packagespdminfo--wherepdminfo--pythonupdatepackage#更新所有packagepdmupdate#更新某个Packagepdmupdate复杂的场景,pdm也已经为你考虑过了,它提供了很多选项,你可以使用--save-compatible:项目依赖于一个兼容的版本--save-wildcard:保存通配符版本(还不确定)--save-exact:保存指定确切版本的包--save-minimum:保留包的最低版本--update-reuse:尝试只更新包命令行指定,如果依赖包不能更新,则不更新--update-eager:更新一个包,同时更新它的依赖包(递归升级)--prerelease:允许提前发布(还不清楚)--unconstrained:忽略包版本的约束,可以升级包到最新版本--top:只更新pyproject.toml中的包--dry-run:测试运行,不修改锁文件--no-sync:只更新锁文件,不更新包如果你的依赖包有setgroup,也可以指定组更新pdmupdate-Gsecurity-Ghttp也可以指定组更新组中的包pdmupdate-Gsecuritycryptography添加-d指定dev依赖#更新所有dev依赖pdmupdate-d#Updatedev依赖某个组的某个包pdmupdate-dGtestpytest也可以指定--prod或--production来升级non-dev(即production)packageswhenswitchingPythonversion当你初始化pdm项目时,你已经选择了当前的Python版本和可用的Python版本范围。以后如果想更改可以使用use命令,但是版本以之前设置的版本范围为准。假设允许范围是python3.9+,当前使用的是python3.10,直接切换即可。pdmusepython3.9commandaliases在pyproject.toml中添加[tool.pdm.scripts]设置快捷命令别名。如果项目的执行有很多参数,这种设置别名的方法会非常有用。$tail-n2pyproject.toml[tool.pdm.scripts]start='pythonmain.py'$pdmrunstartRunningcmdscript:['python','main.py']你好,pdm[tool.pdm.scripts]有两种形式#第一种[tool.pdm.scripts]start="pythonmain.py"#第二种[tool.pdm.scripts]start={cmd="pythonmain.py"}如果你想的话你给参数添加注释,你必须使用第二种方法,例如[tool.pdm.scripts]start={cmd=["flask","run",#Importantcommenthereaboutalwaysusingport54321"-p","54321"]}除了cmd,还有另外两个参数。一个是shell参数。从输出中,您应该看到与cmd的区别,它几乎与subprocess.Popen()withshell=True$tail-n2pyproject.toml[tool.pdm.scripts]start={shell="pythonmain.py"}$pdmrunstartRunningcmd脚本:pythonmain.py你好,pdm其中一个是env_file参数,可以指定配置环境变量的文件[tool.pdm.scripts]start.cmd="flaskrun-p54321"start.env_file=".env"如果你想限制这个环境变量的文件不仅限于某个命令,而是pdm全局运行,可以这样配置[tool.pdm.scripts]_.env_file=“.env”方案兼容其他方案迁移到pdmpdm已经足够好了,足够开放,如果你目前正在使用其他包管理器,比如pipenv,poetry,或者还在用最原始的requirements.txt,你也可以轻松迁移到pdm:使用pdmimport-f无需初始化,当你直接执行pdminit或pdminstall时,它会自动识别你当前的依赖项并将pdm转换为其他解决方案。也可以作为pdm管理的项目导出到其他解决方案。pyproject.toml和pdm.lock是pdm的后起之秀,pdm的两个核心文件也没有忘本。它支持:将pyproject.toml转换为setup.pypdmexport-fsetuppy-osetup.py将pdm.lock转换为requirements.txtpdmexport-orequirements。txtpycharm配置支持PDM在命令行创建工程目录,进入工程目录进行init初始化,设置pypi源,然后使用pycharm打开该目录。mkdirpdm-democdpdm-demopdmconfigpypi.urlpdmconfigpypi.urlhttps://img.ydisp.cn/news/20220901/jwcgyq34ozg--trusted-hostmirrors.aliyun.compdmconfigpypi.url#Linux下永久设置?vi~/.pip/pip.conf[global]index-url=https://mirrors.aliyun.com/pypi/simple/[install]trusted-host=mirrors.aliyun.com#使用pdm安装包:pdm添加-vrequestsflask安装完成后,我们可以在当前目录下看到__pypackages_目录。我们前面安装的库是隔离安装在它下面的,类似于node的node_modules目录。这样就实现了项目级别的环境隔离效果,不需要额外创建虚拟环境。使用pdm工程下的本地隔离库在IDE中执行程序非常简单。以pycharm为例,将pdm工程作为pycharm工程打开后,找到如图所示的lib文件夹,标记为SourcesRoot,记得选择解释器对应pdminit初始化的环境。用pycharm打开pdm-demo工程,找到如图所示的lib文件夹,标记为SourcesRoot,记得选择interpreter为pdminit初始化环境对应的Python解释器。pycharm设置Python解释器为pdminit初始化环境对应的Python解释器:首先查看pdminfo信息,可以看到PythonInterpreter解释器路径?pdminfoPDM版本:1.15.0Python解释器:/Users/allenjol/.local/pipx/venvs/pdm/bin/python(3.10)项目根目录:/Users/allenjol/Documents/Codes/pdm-demo项目包:/Users/allenjol/Documents/Codes/pdm-demo/__pypackages__/3.10pycharmsetupPythonInterpreter的路径和pdminfo里面的一样。PDM的使用介绍到此结束。看完是不是觉得很强大,很有用。赶快来试试吧!