gpt4 book ai didi

python - pip 安装 --editable : links to wrong path

转载 作者:太空狗 更新时间:2023-10-30 01:22:44 24 4
gpt4 key购买 nike

我已经使用 setuptools 一段时间了,最​​近还使用 pip 来为我的项目创建发行版,并且一切正常:“python setup.py sdist”、“python setup.py install”等命令有效按照配置。现在我想使用 pip 安装为“可编辑”,以便在我对该包进行维护时简化测试。所以我尝试了

cd \
pip install -e .\mypackage

这会将路径:c:\mypackage 添加到 C:\python27\Lib\site-packages\easy-install.pth。但是,在我的例子中这是错误的,因为 mypackage 的结构如下:

C:\mypackage 
setup.py
src
mypackage
__init__.py
...
docs
tests

所以 easy-install.pth 应该包含 c:\mypackage\src,而不是 c:\mypackage。我可以手动编辑 easy-install.pth 以将“\src”添加到添加的路径,然后“import mypackage”成功,正如它应该的那样。如果我从 c:\mypackage 运行命令“python setup.py develop”,也会出现同样的问题,因此问题可能出现在 setuptools 级别。

setup.py 有:

setup( 
...
packages = find_packages('src'),
package_dir = {'mypackage': 'src/mypackage'},
...
)

(唯一的其他设置参数是作者、版本等文本项,由于与问题无关,因此未列出)。

我不想在 easy-install.pth 中编辑路径。查看文档,看不到任何表明将包源根目录放在与 setup.py 分开的文件夹中的问题。我做错了什么?

最佳答案

我找到了这个问题的答案。原来这是在 distutils 级别(pip 依赖于依赖 distutils 的 setuptools)。 section 2.1 of "Distributing Python Modules"讨论了 package_dir 参数的使用,表明“[如果]您将所有 Python 源代码保存在 lib 下,以便“根包”中的模块(即,根本不在任何包中)在 lib 中,foo 包中的模块是在 lib/foo, ", 那么你应该使用

setup(
...
packages = ['foo'],
package_dir = {'': 'lib'},
...
)

从OP中可以看出,我确实是这样,所以改成如下:

setup(
...
packages = ['mypackage'],
package_dir = {'': 'src'},
...
)

这成功了。所以问题是为什么

   package_dir = {'': 'src'}

适用于发布和可编辑安装,而​​

   package_dir = {'mypackage': 'src/mypackage'}

适用于发布,但不适用于可编辑安装。

答案是,默认情况下,distutils(以及 setuptools 和 pip)期望分发的“根”是具有 setup.py 的文件夹:任何 *.py 和包文件夹都将安装在 site-包裹应该在那里;如果他们在别处,则必须告知。这是通过在 package_dir 中有一个带有键 '' 的条目来完成的。由于我原来的 package_dir 没有这个,distutils 假设我的 dist 的根是包含 setup.py 的文件夹,这就是它指向可编辑安装的地方。发布安装工作正常,因为我所说的 package_dir mypackage/init.py 在 src/mypackage 中,它是,所以对于“常规”分发,所有工作正常。

关于python - pip 安装 --editable : links to wrong path,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19602582/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com