使用 PEP 582#
使用 PEP 582,依赖项将被安装到项目根目录下的 __pypackages__
目录中。在全局启用 PEP 582 后,还可以使用项目解释器直接运行脚本。
当项目解释器为普通 Python 时,启用该模式。
此外,在您的机器上第一次使用的项目中,如果它包含空的 __pypackages__
目录,PEP 582 将自动启用,并且不会创建虚拟环境。
全局启用 PEP 582#
要使 Python 解释器知道 PEP 582 包,需要将 pdm/pep582/sitecustomize.py
添加到 Python 库搜索路径。
只需要执行 pdm --pep582
,环境变量就会自动改变。不要忘记重新启动终端会话以使其生效。
修改环境变量的命令可以通过 pdm --pep582 [<SHELL>]
打印。如果没有给出 <SHELL>
, PDM 将根据一些猜测选择一个。可通过 eval "$(pdm --pep582)"
命令执行。
您可能希望在 .bash_profile
(或类似的概要文件)中写入一行,以便在登录时生效。例如,在 bash 中你可以这样做:
pdm --pep582 >> ~/.bash_profile
再次强调,不要忘记重新启动终端会话以使其生效。
配置 IDE 以支持 PEP 582#
现在大多数 IDE 中都没有对 PEP 582 的内置支持或插件,您必须手动配置您的工具。
PDM 会在 .pdm.toml
中写入并存储整个项目的配置,建议你在 .gitignore
中添加以下几行:
.pdm.toml
__pypackages__/
PDM VSCode#
在 .vscode/settings.json
的顶层 dict 中添加以下两个条目:
{
"python.autoComplete.extraPaths": ["__pypackages__/<major.minor>/lib"],
"python.analysis.extraPaths": ["__pypackages__/<major.minor>/lib"]
}
这个文件可以用 pdm-vscode
插件自动生成。
在全局范围内启用 PEP 582,并确保 VSCode 使用与你启用 PEP582 相同的用户和 Shell 运行。
无法在全局启用 PEP582?
如果由于某种原因不能全局启用 PEP 582,您仍然可以在每个项目中配置每个 “launch”:在 .vscode/launch.json
中,在启动配置中设置 PYTHONPATH
环境变量。例如,要调试 pytest
运行:
{
"version": "0.2.0",
"configurations": [
{
"name": "pytest",
"type": "python",
"request": "launch",
"module": "pytest",
"args": ["tests"],
"justMyCode": false,
"env": {"PYTHONPATH": "__pypackages__/<major.minor>/lib"}
}
]
}
如果你的包位于 src
目录中,也要将它添加到 PYTHONPATH
:
"env": {"PYTHONPATH": "src:__pypackages__/<major.minor>/lib"}
如何使用 Pylance/Pyright?
如果你已经配置了 "python.analysis.diagnosticMode": "workspace"
,您会看到大量的错误/警告。您可能需要在工作空间目录下创建 pyrightconfig.json
,填写以下字段:
{
"exclude": ["__pypackages__"]
}
然后重新启动语言服务器或 VS Code,就可以开始了。在将来(microsoft/pylance-release#1150),也许这个问题会得到解决。
如何使用 Jupyter Notebook?
如果你想使用 pdm 来安装 jupyter notebook,并在 vscode 中与 python 扩展一起使用:
使用
pdm add notebook
或者直接安装notebook
在项目目录中添加
.env
文件,内容如下:
PYTHONPATH=/your-workspace-path/__pypackages__/<major>.<minor>/lib
如果上述方法仍然不起作用,很可能是因为在 Notebook 启动时没有正确加载环境变量。有两种变通办法。
在终端运行
code .
。它将在当前目录中打开新的 VSCode 窗口,路径设置正确。在新窗口中使用 Jupyter Notebook如果你不想打开新窗口,在 Jupyter Notebook 的开头运行以下命令显式设置路径:
import sys
sys.path.append('/your-workspace-path/__pypackages__/<major>.<minor>/lib')
PDM PyCharm#
Mark __pypackages__/<major.minor>/lib
as Sources Root.
Then, select as Python interpreter a Python installation with the same <major.minor>
version.
Additionally, if you want to use tools from the environment (e.g. pytest
), you have to add the
__pypackages__/<major.minor>/bin
directory to the PATH
variable in the corresponding
run/debug configuration.
PDM Neovim#
If using neovim-lsp with
pyright and want your
__pypackages__
directory to be added to the path, you can add this to your
project’s pyproject.toml
.
[tool.pyright]
extraPaths = ["__pypackages__/<major.minor>/lib/"]