Python先锋实验:一款不需要虚拟环境的包管理器

作为 Python 开发者,当前大部分的 Python 包管理器也同时管理虚拟环境,这主要是为了隔离项目的开发环境。

虚拟环境已经成为 Python 开发中必不可少的部分,但同时它也创造了进入障碍。

以下是它的部分问题

  • 对于新手来说,虚拟环境的工作方式令人困惑
  • 不同的平台需要不同的命令集来激活虚拟环境
  • 你需要在每个终端中都激活虚拟环境
  • 多个虚拟环境嵌套的使用体验不佳
  • 以下是 PDM 的特点

  • 不依赖虚拟环境。
  • 简单且快速的依赖解析器
  • 完备的插件系统
  • PDM 使用起来非常轻松,接下来让我们尝试一下。

    PDM 自身的安装需要 Python >= 3.7,但它并不限制项目使用的 Python 版本。

    PDM的包管理

    官方推荐用 pipx 安装 pdm

    > pipx install pdm

    接下来让我们来创建一个 Django 项目的隔离环境。

    首先创建并进入项目路径:

    > mkdir pdm-django> cd pdm-django

    在此路径中初始化 PDM :

    > pdm init

    初始化时会询问此项目使用的 Python 版本,笔者选了 Python 3.6.8 。

    完成后就可以正式开始使用 PDM 了,比如:

    > pdm run python -VPython 3.6.8

    pdm run 执行此环境下的脚本或可执行程序。

    接下来安装 django:

    > pdm add django

    等待一会儿后,django 就安装完成了。

    让我们试试把 django 的开发服务器给运行起来:

    # 创建django项目> pdm run django-admin startproject blog# 进入manage.py所在路径> cd blog# 运行django服务器> pdm run python manage.py runserver

    Django 项目就顺利运行起来了。用浏览器访问 http://127.0.0.1:8000/ ,看到了熟悉的小火箭页面。

    这整个过程是完全未创建虚拟环境的。

    查看当前 PDM 管理的包:

    > pdm listPackage           Version----------------- -------asgiref           3.3.4django            3.2pytz              2021.1sqlparse          0.4.1typing-extensions 3.7.4.3

    看不到任何全局中的包,非常的干净。

    多项目环境

    上面的例子演示了一下 PDM 管理的环境和全局环境是隔离的。接下来测试一下多个项目之间的环境是否也是隔离的。

    在磁盘根路径下创建一个 Flask 的新项目:

    # 创建并进入flask项目路径> mkdir pdm-flask> cd pdm-flask# 初始化pdm> pdm init# 安装flask包> pdm add requests flask 

    项目就创建好了。

    查看 Python 解释器版本:

    > pdm run python -VPython 3.9.1

    初始化时笔者选择了 Python 3.9.1,和前面的 Django 项目做区分。

    查看已安装的包:

    > pdm listPackage      Version------------ ---------certifi      2020.12.5chardet      4.0.0click        7.1.2flask        1.1.2idna         2.10itsdangerous 1.1.0jinja2       2.11.3markupsafe   1.1.1requests     2.25.1urllib3      1.26.4werkzeug     1.0.1

    没有 Django 相关的东西,很好。

    运行下 Django 的命令试试:

    > pdm run django-admin startproject blog[PdmUsageError]: Command 'django-admin' is not found on your PATH.

    Django 指令未能运行,说明环境确实是隔离了。

    再试试运行 Flask 服务。

    __pypackages__ 同级的目录下创建 app.py 脚本:

    from flask import Flaskapp = Flask(__name__)@app.route('/')def hello_world():    return 'Hello World!'if __name__ == '__main__':    app.run()

    启动 Flask 服务:

    > pdm run python app.py 

    Flask 服务就顺利运行起来了,完美!


    另外,如果你使用的是 Bash,可以通过执行eval $(pdm –pep582)设置环境变量,现在你可以用你最熟悉的 Python 解释器 运行脚本了:

    $ python /.../pdm-flask/app.py * Serving Flask app "app" (lazy loading) ... * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

    以上就是一个现代化的 Python 包管理器的入门了,感觉如何?

    实际上 PDM 的功能远不止这些,有兴趣的读者就自行前往文档了解。

    如何做选择

    说这么多,让我们回到那个核心问题:是否应该在项目中使用 PDM?

  • 如果你觉得 pipenv 或者 poetry 用着感觉良好,也没什么不顺手的地方,那么继续使用它们吧。
  • 如果你发现这些工具用起来不大顺手或者理解起来有困难,那么 PDM 可能是好的选择。
  • PDM项目 非常年轻且活跃。如果你也是积极的开源项目参与者,那么非常适合参与到此类项目中,甚至成为核心贡献者。

    等到项目代码量膨胀且逐渐完善后,参与进来就需要更高的门槛了。

    年轻项目的劣势就是版本进化速度非常快,并且容易产生 Bug。另一个潜在问题就是本项目属于先锋实验,其依据的 PEP 582 至今还是草案。

    如何选择就根据读者的项目情况来确定了。就笔者的建议而言,你可以先在试验性项目中使用 PDM,若体验舒适,再逐步迁移到正式的项目中来。

    PDM创建者

    PDM创建者 Frost Ming,Python 开源爱好者,坐标深圳。Pycon 讲师,pipenv 核心贡献者。活跃于各大社交平台,帮助众多 Python 患者解决各类疑难杂症。

    声明:本站部分文章内容及图片转载于互联 、内容不代表本站观点,如有内容涉及侵权,请您立即联系本站处理,非常感谢!

    (0)
    上一篇 2021年6月12日
    下一篇 2021年6月12日

    相关推荐