pip install --editable cause "running develop, error in 'egg_base' option: 'src' does not exist"

pip install --editable cause "running develop, error in 'egg_base' option: 'src' does not exist"

我试图通过 pip3 install --editable 安装我自己的 python 应用程序。但是我收到了类似“running develop, error in 'egg_base' option: 'src' does not exist”的错误。

该项目具有 src 文件夹布局。

hyperorg
├── docs
├── README.md
├── src
│   ├── hyperorg
│   │   ├── __init__.py
│   │   └── __main__.py
│   ├── setup.cfg
│   └── setup.py
└── tests

我在文件夹 hyperorg 中做了 pip3 install --editable src,在文件夹 hyperorg/src 中做了 pip3 install --editable .,没有明显的区别。

setup.py 只需调用 setuptools.setup().

这是我根据 official documentatoin.

构建的 setup.cfg 中的一些行
[options]
package_dir=
    =src
packages = find:
zip_safe = False
install_requires =
    orgparse

[options.packages.find]
where = src
exclude =
    docs*
    tests*
    notes
    .gitignore

完整错误输出

$ pip3 install --editable src
Obtaining file:///home/user/tab-cloud/hyperorg/src
Requirement already satisfied: orgparse in /usr/local/lib/python3.9/dist-packages (from Hyperorg==0.0.0a1) (0.3.1)
Installing collected packages: Hyperorg
  Running setup.py develop for Hyperorg
    ERROR: Command errored out with exit status 1:
     command: /usr/bin/python3 -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/home/user/tab-cloud/hyperorg/src/setup.py'"'"'; __file__='"'"'/home/user/tab-cloud/hyperorg/src/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' develop --no-deps --user --prefix=
         cwd: /home/user/tab-cloud/hyperorg/src/
    Complete output (2 lines):
    running develop
    error: error in 'egg_base' option: 'src' does not exist or is not a directory
    ----------------------------------------
ERROR: Command errored out with exit status 1: /usr/bin/python3 -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/home/user/tab-cloud/hyperorg/src/setup.py'"'"'; __file__='"'"'/home/user/tab-cloud/hyperorg/src/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' develop --no-deps --user --prefix= Check the logs for full command output.

我想知道 running develop 是什么意思。

setup.cfgsetup.py 文件的位置是这里的问题。

出于习惯,根据对另一个项目的经验,我将它们放在 src 文件夹中。

hyperorg
├── src
│   ├── hyperorg
│   │   └── ...
│   ├── setup.cfg
│   └── setup.py

这在某些情况下可以工作,但官方 setuptools documentation about usage of setup.cfg 也声明要像这样在项目根目录中找到该文件。

hyperorg
├── src
│   └── ...
├── setup.cfg
└── setup.py

在那种情况下,我的设置非常有效,无需修改任何其他文件。我只需要在项目根目录中做

pip3 install --editable .

错误输出中的字符串develop指向setuptoolsDevelopment Mode。这是因为 pip 调用中的 --editable 选项。 开发模式的效果是包不是通过复制系统正确目录中的 py 文件的通常方式安装的,而只是创建了到源文件夹的链接。