【问题标题】:pip install does not install local module/package from setup.cfgpip install 不会从 setup.cfg 安装本地模块/包
【发布时间】:2021-12-20 21:37:36
【问题描述】:

我有以下 Pipfile 和 setup.cfg,当我执行 pip install -e . 时,它会安装 install_requires 下的包,而不是本地包。

Pipfile --

[[source]]
url = "https://${USERNAME}:${PASSWORD}@${HOST}"
verify_ssl = true
name = "python"

[packages]
    my-cli = {editable = true, path = "."}

[dev-packages]

[requires]
python_version = "3.9"

setup.cfg --

[metadata]
name = my-cli
version = 0.1.0
[options]
include_package_data = True
install_requires =
   click
   PyYaml
   jsonschema

[options.package_data]
mymodule.resources = *.*

当我运行pip list 时,我只能看到以下内容:

Package      Version   Location
------------ --------- -------------------------
click        8.0.3
PyYaml       3.13
jsonschema   4.1.2

但是我看不到 my-cli 包。

【问题讨论】:

  • 我很困惑为什么你首先拥有 Pipfile。 Pipfile 仅由 pipenv 使用,不是由普通的 pip install 使用。当你改为pipenv install 时会发生什么?
  • 问题现在已经解决了,基本上 pip 安装是在一个 ubuntu 映像中进行的,最后只是启用了 venv,“RUN apt-get update && apt-get install -y python3.9-venv” "运行 python3 -m venv /opt/venv"
  • 哦酷。我现在没有时间发布完整的答案,但是由于您有一个 Pipfile,您还可以安装 pipenv(它也创建一个 venv)并执行 pipenv install

标签: python python-3.x pip setuptools pipenv


【解决方案1】:

pipenv 使用 Pipfile,而不是常规/普通 pip。

https://pipenv.pypa.io/en/latest/basics/#example-pipfile-pipfile-lock:

Pipfile 和 Pipfile.lock 示例

Pipfiles 包含项目依赖项的信息,以及 取代了大多数 Python 项目中使用的 requirements.txt 文件。你 应该在 Git 存储库中添加一个 Pipfile,让克隆 存储库知道唯一需要的是将 Pipenv 安装在 机器并输入pipenv install。 Pipenv 是一个参考 使用 Pipfile 的实现。

在做

pip install -e .

不会读取您的 Pipfile。

您需要改为使用任一

pipenv install -e .

安装您的可编辑依赖项将其添加到 Pipfile

pipenv install

如果可编辑的依赖项已经在 Pipfile 中并且您只希望 pipenv 执行安装操作。

无论哪种方式,pipenv 都会安装您的可编辑依赖项 (my-cli) 及其在 setup.cfgsetup.pypyproject.toml(遵循Packaging Python Projects 文档中的规则)。

你可以pipenv graph查看已安装的包

sample-module$ pipenv graph
my-cli==0.1.0
  - click [required: Any, installed: 8.0.3]
  - jsonschema [required: Any, installed: 4.3.3]
    - attrs [required: >=17.4.0, installed: 21.4.0]
    - pyrsistent [required: >=0.14.0,!=0.17.2,!=0.17.1,!=0.17.0, installed: 0.18.0]
  - PyYaml [required: Any, installed: 6.0]

这表明package_requires 中列出的包是my-cli 的子依赖项。

来自您的comment

问题现在已经解决,基本上 pip 安装是在 ubuntu 映像中进行的,最后只是启用了 venv,“RUN apt-get update && apt-get install -y python3.9-venv”“RUN python3 -m venv /opt/venv"

太好了。 Python 内置的venvpipenv 都提供了一种创建和维护虚拟环境的方法。您可以从其Basic Usage 教程中了解pipenv。我想说的主要区别是 pipenv 维护一个 Pipfile 和一个 Pipfile.lock 来跟踪虚拟 env 的包。

选择哪个更方便。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-09
    • 2018-02-06
    • 2013-03-03
    • 2016-02-21
    • 2011-08-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多