pip install . 和 pip install -e 的区别是什么?

3
我已经创建了一个Python软件包,现在我想将其安装为常规软件包。使用"pip3 install ."和"pip3 install -e ."有什么区别?
我之所以问这个问题,是因为使用"pip3 install ."安装软件包后,虽然已安装但系统无法识别。而第二种方式则可以正常工作。

这是已记录的 - bruno desthuilliers
1
你到底不清楚什么?pip install --help没有提供足够的信息吗? - MisterMiyagi
1
我投票关闭这个问题,因为它显然是离题的,并且已有明确的文档记录。 - bruno desthuilliers
1
我现在遇到了同样的问题:使用 pip install -e . 一切正常。但是使用 pip install . 会出现 "ModuleNotFoundError" 错误。文档中没有任何解释;甚至有一个专门讲这个问题的页面,但也没有提到这个问题:https://pip.pypa.io/en/stable/topics/local-project-installs/。 - maininformer
确保在你的 setup.py 文件中包含子包 - maininformer
1个回答

5
“-e”标志告诉pip以可编辑模式安装:
-e,--editable <path/url>
    Install a project in editable mode (i.e. setuptools "develop mode") from a local project path or a VCS url.

https://manpages.debian.org/stretch/python-pip/pip.1

那么可编辑模式或setuptools的“开发模式”是什么?
该命令允许您部署项目源代码,用于一个或多个“暂存区”,在这些区域中,它将可供导入使用。此部署是以这样的方式进行的,即在每次更改后无需运行构建或安装步骤即可立即在暂存区(们)中提供对项目源代码的更改。
develop命令通过在给定的暂存区中创建一个名为项目名称的.egg-link文件来工作。如果暂存区是Python的site-packages目录,则还会更新easy-install.pth文件,以便默认情况下所有使用该Python安装运行的程序都可以在sys.path上找到该项目。
develop命令还在暂存区(或指定的单独目录)中安装包装器脚本,以确保在运行项目源脚本之前,该项目的依赖项可在sys.path上使用。并且,它通过下载和安装必要的内容,确保在暂存区中可用任何缺少的项目依赖项。
最后,develop命令调用build_ext -i命令,以确保项目中的任何C扩展已经构建并且是最新的,并调用egg_info命令以确保更新了项目的元数据(以便运行时和包装器知道该项目的依赖项)。如果您对项目的设置脚本或C扩展进行了任何更改,则应针对所有相关的暂存区重新运行develop命令,以使项目的脚本、元数据和扩展保持最新状态。
或者,简而言之;
将您的项目以“开发模式”部署,使其在sys.path上可用,但仍可以直接从源代码中进行编辑。

https://setuptools.readthedocs.io/en/latest/setuptools.html#develop-deploy-the-project-source-in-development-mode


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接