【问题标题】:pip install a project without copying the entire project folderpip 安装项目而不复制整个项目文件夹
【发布时间】:2020-03-07 09:19:16
【问题描述】:

当我在我正在处理的项目上运行pip install . 时,整个项目文件夹会在 pip 开始安装过程之前复制到一个临时文件夹中。对我来说,这是一个问题,因为我的项目文件夹包含数千兆字节的数据,这些数据无法再次放入我的磁盘。因此,pip install 会填满我的磁盘,然后在可用空间不足时崩溃。

当我运行python setup.py install 时,这不是问题,因为我明确定义了哪些文件夹应该是我的模块的一部分,当然所有这些数据都不包括在内。此外,.gitignore.dockerignore 等中排除了所有数据。但是,pip 并不在意这些,因为 documentation states:

在常规安装期间,pip 会将整个项目目录复制到一个临时位置并从那里安装。例外是 pip 将排除项目顶层中存在的 .tox 和 .nox 目录被复制。

如何防止 pip 复制我的整个项目文件夹并使其尊重我精心编写的 setup.py 文件的内容?


背景:我以前对setup.py install很满意,但最近想试试gitpre-commit,它内部调用pip install .来构建项目。到目前为止,我没有使用 pip 作为我的项目的构建工具,但我认为这可能是一个至少让我的项目与 pip 兼容的好机会,但到目前为止无济于事......

【问题讨论】:

  • 我对 pip 的经验很少,但我听说你可以指定 TMPDIR=/my/project --cache-dir=/my/project 和 --build /my/project 都一样目录以及 pip install 命令。
  • 为什么项目包含千兆字节的数据?数据位置不应该在配置中指定,而不是烘焙到包中吗?如果该软件包将达到千兆字节,那么安装它有什么意义呢?只需从目录中运行它,因为它太大而无法合理地部署在任何地方。
  • @blueteeth 请阅读问题:我特别提到,.gitignore 中排除了所有这些文件,setup.py 仅引用我的源文件,而不是数据。我可以添加一些配置,允许我使用不同的路径,但这会增加更多的复杂性,我认为让你的数据接近你的代码是一个好习惯。实际上,这里的问题是 pip 不尊重 setup.py 中的配置,而不是我的项目结构“错误”。
  • 除了此行安装pre-commit 钩子而不是您的回购。做一个research,而不仅仅是源代码中的一个grep。

标签: python pip setup.py


【解决方案1】:

这似乎是 pip 中长期存在的问题,至少从 2014 年就开始讨论(参见 issue #2195)。

有一些建议可以解决这个问题,比如添加对 pipignore 文件的支持,这些文件就像 gitignore 一样工作,但到目前为止,唯一实现的是向 ignore .tox and .nox folders 添加硬编码规则,这确实解决了具体问题这些工具有,但不是一般问题。

一种解决方法是先创建一个source distribution (sdist),然后通过 pip 安装该源包:

python setup.py sdist
pip install dist/<name>.tar.gz

当然,这不会解决调用pip install . 的第三方工具本身的问题。已经讨论过让这成为 pip 的默认行为,但由于我无法理解的原因,在过去 6 年中没有触及这一点,所以我不希望在不久的将来解决这个问题。

【讨论】:

    猜你喜欢
    • 2011-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-14
    • 1970-01-01
    • 1970-01-01
    • 2011-01-02
    相关资源
    最近更新 更多