README_zh.md 4.2 KB
Newer Older
F
frostming 已提交
1 2 3 4 5
# PDM - Python Development Master

一个现代的 Python 包管理器,支持 PEP 582。[English version README](README.md)

![Github Actions](https://github.com/pdm-project/pdm/workflows/Tests/badge.svg)
F
frostming 已提交
6 7
![PyPI](https://img.shields.io/pypi/v/pdm?logo=python&logoColor=%23cccccc)

F
Frost Ming 已提交
8
[![asciicast](https://asciinema.org/a/OKzNEKz1Lj0wmCVtcIqefskim.svg)](https://asciinema.org/a/OKzNEKz1Lj0wmCVtcIqefskim)
F
Frost Ming 已提交
9

F
frostming 已提交
10
[📖 文档](https://pdm.fming.dev)
F
frostming 已提交
11 12 13

## 这个项目是啥?

F
Frost Ming 已提交
14
PDM 旨在成为下一代 Python 软件包管理工具。它最初是为个人兴趣而诞生的。如果你觉得 `pipenv` 或者
F
frostming 已提交
15 16 17
`poetry` 用着非常好,并不想引入一个新的包管理器,那么继续使用它们吧;但如果你发现有些东西这些
工具不支持,那么你很可能可以在 `pdm` 中找到。

18 19 20 21 22 23 24 25 26 27 28 29 30 31
PEP 582提出下面这种项目的目录结构:

```
foo
    __pypackages__
        3.8
            lib
                bottle
    myscript.py
```

项目目录中包含一个`__pypackages__`目录,用来放置所有依赖的库文件,就像`npm``node_modules`一样。
你可以在[这里](https://www.python.org/dev/peps/pep-0582/#specification)阅读更多提案的细节。

F
frostming 已提交
32
## 主要特性
F
Frost Ming 已提交
33 34 35 36

- PEP 582 本地项目库目录,支持安装与运行命令,完全不需要虚拟环境。
- 一个简单且相对快速的依赖解析器,特别是对于大的二进制包发布。
- 兼容 PEP 517 的构建后端,用于构建发布包(源码格式与 wheel 格式)
F
Frost Ming 已提交
37
- 具备一个完备的插件系统
F
frostming 已提交
38 39

## 为什么不用虚拟环境?
F
Frost Ming 已提交
40

F
frostming 已提交
41 42 43 44 45 46 47 48 49 50 51
现在大部分的 Python 包管理器也同时管理虚拟环境,这主要是为了隔离项目开发环境。但如果涉及到虚拟
环境嵌套虚拟环境的时候,问题就来了:你可能用一个虚拟环境的 Python 安装了某个虚拟环境管理工具,
然后又用这个工具去创建更多虚拟环境。当某一天你升级了新版本的 Python 你必须一个一个去检查这些
虚拟环境,没准哪个就用不了了。

然而 PEP 582 提供了一个能把 Python 解释器和项目开发环境解耦的方法。这是一个相对比较新的提案,
没有很多相关的工具实现它,这其中就有 [pyflow]。但 pyflow 又是用 Rust 写的,不是所有 Python 的社区
都会用 Rust,这样就没法贡献代码,而且,基于同样的原因,pyflow 并不支持 PEP 517 构建。

## 安装:

F
Frost Ming 已提交
52 53
PDM 需要 Python 3.7 或更高版本。

F
Frost Ming 已提交
54 55
强烈推荐把 `pdm` 安装在一个隔离环境中, 用 `pipx` 是坠吼的。

F
frostming 已提交
56 57 58
```bash
$ pipx install pdm
```
F
Frost Ming 已提交
59

F
frostming 已提交
60 61 62 63 64 65 66 67 68 69
或者你可以将它安装在用户目录下:

```bash
$ pip install --user pdm
```

## 使用方法

作者很懒,还没来得及写,先用 `python -m pdm --help` 查看帮助吧。

F
Frost Ming 已提交
70 71 72 73 74
## 常见问题

### 1. `__pypackages__` 里都包含什么?

PEP 582 尚处于草案阶段,还需要补充很多细节,比如提案中并未说明可执行程序应该如何存放。PDM 会把 `bin`(可执行程序), `include`(头文件),
S
shidenggui 已提交
75
以及 `lib` 都放在 `__pypackages__/X.Y` 下面。
F
Frost Ming 已提交
76 77 78 79 80 81 82

### 2. 如何运行 `__pypackages__` 下的可执行程序?

推荐的方式是在你的命令前面加上 `pdm run`, 你也可以直接运行 `bin` 下面的可执行程序。PDM 的安装器已经在可执行程序里面注入了本地包路径了。

### 3. 使用 PDM 时会载入哪些三方库路径?

F
Frost Ming 已提交
83
只有本项目的 `__pypackages__` 中的包会被载入,也就是说,Python 的 `site-packages` 目录不会被载入,完全项目隔离。
F
Frost Ming 已提交
84

S
shidenggui 已提交
85
### 4. 我能把 `__pypackages__` 保存下来用来部署到别的机器上吗?
F
Frost Ming 已提交
86

S
shidenggui 已提交
87
最好别这样搞,`__pypackages__` 下面安装的包是和操作系统相关的,所以除非是纯 Python 的包,都会有兼容性的问题。你应该把 `pdm.lock`
F
Frost Ming 已提交
88 89
纳入版本管理,然后在目标环境中执行 `pdm sync`

F
frostming 已提交
90
### 5. 我能用`pdm`管理一个 Python 2.7 的项目吗?
F
Frost Ming 已提交
91

F
frostming 已提交
92 93
当然可以。只是`pdm`本身的安装需要 Python 版本高于 3.7,它并不限制项目使用的 Python 版本。

F
Frost Ming 已提交
94
## 鸣谢
F
frostming 已提交
95 96 97 98 99 100

本项目的受到 [pyflow] 与 [poetry] 的很多启发。

[pyflow]: https://github.com/David-OConnor/pyflow
[poetry]: https://github.com/python-poetry/poetry

F
Frost Ming 已提交
101
## 使用许可
F
Frost Ming 已提交
102

F
frostming 已提交
103
本项目基于 MIT 协议开源,具体可查看 [LICENSE](LICENSE)