准备一个复杂的Python项目提交到启动板

我试图把自己的头围绕在整个PPA的事情上,似乎每个人都是这样做的。 让我们来看一个像http://bokeh.pydata.org/这样的项目,它有一个node.js的依赖关系,并且把它做成一个.deb。 按照这个 指南 ,在这里的各种职位,我试图用stdeb来做到这一点:

 pypi-download bokeh tar xfz bokeh-0.7.0.tar.gz cd bokeh-0.7.0/bokehjs/ npm install grunt build cd .. python3 setup.py --command-packages=stdeb.command sdist_dsc 

输出的结尾是

 dh clean --with python3 --buildsystem=python_distutils dh_testdir -O--buildsystem=python_distutils debian/rules override_dh_auto_clean make[1]: Entering directory `/home/emre/Desktop/bokeh-0.7.0/deb_dist/bokeh-0.7.0' python3 setup.py clean -a /home/emre/Desktop/bokeh-0.7.0/deb_dist/bokeh-0.7.0/bokehjs ERROR: Cannot install BokehJS: files missing in `./bokehjs/build`. Please build BokehJS by running setup.py with the `--build_js` option. Dev Guide: http://bokeh.pydata.org/docs/dev_guide.html#bokehjs. 

我刚刚做到了! 我错过了什么吗? 这个build筑对于直接从pypi进行的东西来说甚至是必要的吗? 这些指南覆盖了这些东西。

制作优秀的作品可能会很复杂,尤其是当你不是上游作者,并且不确定他们的软件安装意图究竟是什么。 复杂化是必要的,因为行为良好的行为必须符合相当长的政策和要求清单,以便用户在许多不同的情况和情况下知道对他们的期望。 debs的源代码需要包含足够的信息,可以通过自动化系统构build(包括安装任何必要的构build依赖项)。 二进制文件必须将他们的文件放在系统的正确位置,不要打破任何其他包,并能够在卸载后自行清理。 Debs应该可以安装,而不需要用户在交互式terminal上观看。 Debs必须声明它们的所有依赖关系,以及这些依赖关系的必要版本,除了一些被认为是“required”的包之外。 在构build或安装期间,Debs不应该从互联网上下载任何东西。 等等等等。 这种严格性和社区遵循的程度实际上是运行基于Debian的分发的最重要的好处之一。

另一方面,Python源代码发行版(如PyPI上的发行版)几乎可以做任何他们想做的事情。 用setup.py构build和安装命令的最佳实践正在形成,但是并不总是遵循这些命令,甚至当它们存在时,仍然有很多解释和变异的空间。 有些(如你在这里引用的)可能会随意要求用户在正常构build之前使用不同的非标准选项来调用setup.py 。 一些继续下载自己的依赖关系,并把它们放在任何他们想要的地方。 大多数不重要的软​​件包不知道如何卸载自己。

两种方法都很好,而且在不同的环境下更好。 但是,希望您现在可以看到为什么在一般情况下无法将任意Python源代码自动分配到工作日志中。 计算机必须假设Python将如何运作。

说了这么多,如果你不关心遵守Ubuntu / Debian策略,而只是想把某些东西放在个人存储库中,那么最简单的方法就是改变Python源代码, --build_js东西自动根据需要,而不是抱怨,并要求用户这样做。