【问题标题】:use a relative path in requirements.txt to install a tar.gz file with pip使用 requirements.txt 中的相对路径通过 pip 安装 tar.gz 文件
【发布时间】:2012-03-21 17:14:22
【问题描述】:

我们使用 requirements.txt 文件来存储所有需要的外部模块。除了一个模块之外,每个模块都是从互联网收集的。另一个存储在包含 requirements.txt 文件的文件夹下。

顺便说一句,这个模块可以通过 pip install 轻松安装

我试过用这个:

file:folder/module

或者这个:

file:./folder/module

甚至这个:

folder/module

但总是给我一个错误。 有谁知道这样做的正确方法是什么?

谢谢

【问题讨论】:

    标签: python pip


    【解决方案1】:

    在当前版本的 pip (1.2.1) 中,解释需求文件中的相对路径的方式是模棱两可和半损坏的。 pip 存储库中有一个未解决的问题,它更详细地解释了各种问题和歧义:

    https://github.com/pypa/pip/issues/328

    长话短说,当前的实现与 pip 文档中的描述不匹配,因此在撰写本文时,在 requirements.txt 中使用相对路径还没有一致且可靠的方法。

    也就是说,将以下内容放在我的requirements.txt

    ./foo/bar/mymodule
    

    mymodule 目录的顶层有setup.py 时有效。请注意缺少file:: 协议名称和包含领先的./。此路径与requirements.txt 文件无关,而是与当前工作目录相关。因此需要导航到与requirements.txt 相同的目录,然后运行命令:

    pip install -r requirements.txt
    

    【讨论】:

    • 尽管./ 似乎以这种方式工作 ../ 没有,甚至与 CWD 无关,我也尝试过 ./../
    • 我不知道交易是什么,但在 Windows 上,只有 -e ./foo/bar/mymodule 有效,而不是 .\foo\bar\mymodule
    • 这个答案来自 2012 年,requirements.txt 仍然不支持相对路径吗?
    • 2021 年,requirements.txt 中的../foo 适用于 pip 18.1
    【解决方案2】:

    它基于当前工作目录(如果需要,使用 os.getcwd() 查找)和您在需求文件中提供的相对路径。

    您的需求文件应如下所示:

    fabric==1.13.1
    ./some_fir/some_package.whl
    packaging==16.8
    

    请注意,这仅适用于 .whl 文件而非 .exe

    记得留意 pip install 输出的错误。

    【讨论】:

      【解决方案3】:

      如前所述,文件是相对于当前工作目录的,而不是requirement.txt

      从 v10.0 开始,requirements files support environment variables 格式为:${VAR_NAME}。这可以用作一种机制来指定相对于requirements.txt 的文件位置。例如:

      # Set REQUIREMENTS_DIRECTORY outside of pip
      ${REQUIREMENTS_DIRECTORY}/folder/module
      

      【讨论】:

        【解决方案4】:

        对我来说,只有 file: 指令有效。这甚至适用于 AWS SAM,即sam build。这是我的requirements.txt,englishapps 是我在 AWS Lambda 中需要的自定义 Python 包

        requests
        file:englishapps-0.0.1-py3-none-any.whl
        

        【讨论】:

          【解决方案5】:

          另一种选择是使用名为 Pipenv 的环境管理器来管理此用例。 为新项目执行pipenv install 后的步骤:

          pipenv install -e app/deps/fastai-e 是可编辑的,并且是可选的)

          然后您将在 Pipfile 中看到以下行:
          fastai = {editable = true,path = "./app/deps/fastai"}

          这里有类似的问题:

          https://github.com/pypa/pipenv/issues/209#issuecomment-337409290 https://stackoverflow.com/a/53507226/7032846

          【讨论】:

            猜你喜欢
            • 2019-07-04
            • 2018-06-19
            • 2021-08-05
            • 2013-04-20
            • 2019-09-10
            • 2017-09-11
            • 1970-01-01
            • 2013-07-21
            • 2019-11-09
            相关资源
            最近更新 更多