setup.py 拉入非 Python github repos 并将它们放在正确的目录中?

Posted

技术标签:

【中文标题】setup.py 拉入非 Python github repos 并将它们放在正确的目录中?【英文标题】:setup.py that pulls in non-Python github repos and puts them in the correct directory? 【发布时间】:2012-01-29 06:53:19 【问题描述】:

是否可以创建一个 setup.py 文件:

拉入 github 存储库 将该存储库中的文件放入指定文件夹中

我正在设置一个使用 github 上提供的第三方 javascript 框架的 django 包/应用程序。我希望能够让 setup.py 从 github 中提取最新版本,然后将这些文件放入适当的 static/js 文件夹中。 因此,这与普通的依赖项不同,后者是具有自己 setup.py 文件的 Python 包。

【问题讨论】:

如何将它们设为子模块,以便它们已经包含在子目录中? chrisjean.com/2009/04/20/… 我认为主要问题是他可能一开始没有将他的 django 项目设置为 git repo? 实际上,我最终是在计划它,所以这行得通。 【参考方案1】:

如果您使用的是 setuptool (setup.py),您可以使用依赖项要求: https://***.com/a/3481388/496445

否则,正如 cmets 所建议的,将您的 django 项目设置为实际的 git repo,然后将 github repo 添加为子模块

cd myProject
git init
git submodule add git://path/to/repo.git local/location/repo

然后你就可以 cd 进入那个子模块和git pull

如果你不想将你的项目设置为 git repo,那么蛮力的方法是手动克隆你想要的 github repo,然后在你的 setup.py 中添加一些手动命令

import os
os.system("cd path/to/repo && git pull")

【讨论】:

如果有问题的项目不是 python 模块,这是否有效?呃,其他之前的一切。我仍在计划使用 setuptool 或 distutils(取决于哪个更容易配置),但我引入的对象不是模块,所以我很确定依赖不会起作用。 我想不会,如果它不是 python 包的话。不过,选项二非常简单。 好的,我已经设置了子模块,但是它们是空的,当 pip 由于某种原因被调用时,克隆操作不会导致它们被加载。有什么办法可以让我在运行 pip 时也更新子模块? pip 对 git 特定命令(如子模块)没有直接的 VCS 支持,所以我想您需要做的是在 setup.py 末尾放置一个“post”命令:@ 987654326@ 通过修改 pip 来“修复”它。在此处查看我的更改:github.com/JordanReiter/pip/commit/…【参考方案2】:

另一种方法是提供一个 requirements.txt 文件以用于pip。您可以指定 git 和 mercurial 存储库以及来自 PyPI 的包,这样用户只需执行 pip install -r requirements.txt 即可获得整个项目。

【讨论】:

如果问题中的存储库没有 setup.py 文件,这是否有效? 很抱歉让你失望,但这个答案只有在我处理 python 存储库时才有效,我不是。只是想有些人可能会尝试这个并让它不起作用。如果有一种神奇的方法可以让 pip 通过 requirements.txt 文件拉入非 Python 模块,请告诉我,因为文档中没有关于此的内容。

以上是关于setup.py 拉入非 Python github repos 并将它们放在正确的目录中?的主要内容,如果未能解决你的问题,请参考以下文章

一个关于python3中setup.py小概念

setup.py:限制python解释器的允许版本

python 从setup.json读取的示例setup.py

在 CMake 中使用 setup.py 构建 python 包

python Python - setup.py

python Python打包文件(setup.py)示例