【问题标题】:"pip install --editable ./" vs "python setup.py develop"“pip install --editable ./”与“python setup.py develop”
【发布时间】:2015-07-30 03:05:13
【问题描述】:

两者之间有什么显着差异

pip install -e /path/to/mypackage

还有 setuptools 变体?

python /path/to/mypackage/setup.py develop

【问题讨论】:

标签: python pip setuptools python-packaging


【解决方案1】:

尽量避免直接调用setup.py,它不会正确告诉pip你已经安装了你的包。

pip install -e:

对于本地项目,创建“SomeProject.egg-info”目录 相对于项目路径。与仅使用相比,这是一个优势 setup.py develop,它直接相对于 当前工作目录。

更多:docs

另请阅读 setuptools 的docs

【讨论】:

  • 用户是否必须在更改文件后再次运行“python setup.py sdist”才能使更改生效?
  • 但是,如果您需要使用“set_trace”调试(setup.py 文件本身),那么“python setup.py develop”可以实现
【解决方案2】:

还有一个区别:pip install -e 使用轮子,而 python setup.py develop
不使用它。

使用install,您可以通过使用
pip install -e /path/to/package --no-use-wheel实现相同的行为

关于车轮的更多信息:python wheels

【讨论】:

【解决方案3】:

另一个可能有利于pip install -e 的区别是,如果您的项目在setup.py 中有install_requires 的依赖项,那么pip install -e . 使用pip 安装依赖项,而python setup.py develop 可以使用easy_install 安装,并且可能导致问题回复:如上所述的“鸡蛋信息”。当 install-requires 使用带有自定义 git URL 的 dependency_links 并附加了鸡蛋标识符时,这可能会特别烦人。

【讨论】:

  • 这完全解释了为什么我的私人包无法安装。它在我的 devpi 服务器上,而不是 pypi。谢谢。
  • 当你说包变得可编辑时,你的意思是用户在更改包文件后必须再次运行'python setup.py sdist'?还是不需要运行上面的命令?
  • @variable 当您使用pip install -e . 安装本地包时,它实质上会在相关的 Python 站点包目录中创建一个符号链接以指向您的工作副本。当对该工作副本进行代码更改时,它会立即反映在“已安装”版本中,因此您无需随时重新运行安装命令。这主要用于在代表可安装包的存储库中进行开发,但也可以方便地用于例如编写一些只有绝对导入的模块集合,等等。
【解决方案4】:

还有另一个区别:当您为被视为预发布的版本运行 python setup.py develop 时(可能是因为您在没有签出版本的情况下从 git clone 运行它),那么您将启用安装依赖项的预发布。另一方面,使用pip install --editable,如果您想要这些预发布版本,则必须明确传递--pre

(查看CI log with pre-releases accidentally used 并将其与a fixed build here 进行比较。)

【讨论】:

    猜你喜欢
    • 2020-05-31
    • 2022-11-08
    • 2013-12-18
    • 2013-03-21
    • 1970-01-01
    • 2017-05-25
    • 2023-03-11
    • 1970-01-01
    • 2017-01-14
    相关资源
    最近更新 更多