【问题标题】:pip install --editable: links to wrong pathpip install --editable:链接到错误的路径
【发布时间】:2013-11-05 07:46:16
【问题描述】:

我使用 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 分开的文件夹中是一个问题。我做错了什么?

【问题讨论】:

    标签: python installation pip


    【解决方案1】:

    我找到了答案。原来这是在 distutils 级别(pip 依赖于 setuptools,而 setuptools 又依赖于 distutils)。 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 和要安装在站点中的包文件夹 -包裹应该在那里;如果他们在其他地方,则必须告知。这是通过在 package_dir 中有一个带有键 '' 的条目来完成的。由于我原来的 package_dir 没有这个,distutils 假设我的 dist 的根目录是包含 setup.py 的文件夹,这就是它指向可编辑安装的目录。发布安装工作正常,因为我所说的 package_dir 说 mypackage/init.py 在 src/mypackage 中,它就是这样,所以对于“常规”分发来说一切正常。

    【讨论】:

    • 您有没有找到对两者都适用的配置?
    • @SamuelHarmer 查看上面works for releases and editable install 之前的代码
    • 啊,是的。很抱歉第一次没有正确阅读。谢谢。
    猜你喜欢
    • 2021-04-21
    • 2015-07-30
    • 2017-01-14
    • 1970-01-01
    • 2013-08-07
    • 2020-06-18
    • 1970-01-01
    • 2013-10-04
    • 2021-04-05
    相关资源
    最近更新 更多