24

Python 能够通过运行它的setup.py脚本来“伪安装”一个包,develop而不是install. 这会修改 python 环境,因此可以从当前位置导入包(它不会复制到site-package目录中)。这允许开发其他包使用的包:源代码被原地修改,并且可以通过简单的import.

一切正常,除了该setup.py develop命令创建一个.egg-info具有与setup.py. 混合源代码和临时文件不是一个好主意——这个文件夹需要添加到从 vcs 开始到结束备份系统的多个工具的“忽略”列表中。

是否可以使用但在其他地方setup.py develop创建目录,因此原始源代码不会被临时目录和文件污染?.egg-info

4

3 回答 3

19

setup.py develop就地创建一个 python 蛋;它不会[ 修改] python 环境,因此可以从当前位置导入包。您仍然必须将其位置添加到 python 搜索路径或使用它所在的目录作为当前目录。

命令的工作是develop创建就地 egg,其中可能包括编译 C 扩展、运行 2to3 python 转换过程以创建 Python3 兼容代码,以及提供其他python 代码可能依赖的元数据。当您将软件包作为 egg 安装到您的site-packages目录中时,相同的元数据也包含在其中。数据当然不是临时的(它是从您的setup.py文件中提取的,以便其他工具解析)。

这样做的目的是,当您在更广泛的系统中使用您的包时,您可以依赖该元数据,该系统依赖于存在的元数据,同时仍在开发包。例如,在构建mr.developer开发部署中,当我们需要处理给定包时,我们经常使用自动化获取源代码的过程,这将其构建为开发蛋并在我们工作时将其绑定到部署中编码。

请注意,该.egg-info目录具有特定用途:向 setuptools 生态系统中的其他工具发出信号,表明您的软件包已安装且可用。如果您的包是您设置中另一个 egg 的依赖项,则满足该依赖项。pip并且easy_installbuildout 不会尝试从其他地方取鸡蛋。

除了创建.egg-info目录之外,该命令唯一要做的另一件事就是就地构建扩展。因此,您正在寻找的命令是:

setup.py build_ext --inplace

这将做完全相同的事情,setup.py develop但不包括.egg-info目录。它也不会生成.pth文件。

没有办法只生成.pth文件而忽略.egg-info目录生成。

从技术上讲,setup.py develop还将检查您是否site.py安装了 setuptools 文件以支持命名空间包,但这与此处无关。

于 2012-11-24T05:51:06.843 回答
4

好的方法是将所有源文件保存在特殊目录中,该目录的名称是您的项目名称(使用其他语言的程序员将其代码保存在src目录中)。因此,如果您的setup.py文件在myproject目录中,那么您应该将文件保存在myproject/myproject. 无论主目录中发生什么,此方法都会使您的源与其他文件分开。

我的建议是使用白名单而不是黑名单——告诉工具忽略除myproject目录内的文件之外的所有文件。我认为这是不要ignore太频繁地触摸您的列表的最简单方法。

于 2012-11-25T18:23:14.333 回答
2

试试这个--install-dir选项。您可能还想使用--build-dir更改构建目录。

于 2012-10-15T19:28:57.313 回答