我试图为Nix打包一个python应用程序,但是我发现大部分文档都假设我要打包一个库。在
为了做到这一点,我查看了Rednotebook示例(除了我碰巧知道它是用python编写的以外,并不是出于任何特殊原因),它可以在python-packages中找到,但由于该文件非常巨大,因此相关部分如下:
redNotebook = buildPythonPackage rec {
name = "rednotebook-1.8.1";
src = pkgs.fetchurl {
url = "mirror://sourceforge/rednotebook/${name}.tar.gz";
sha256 = "00b7s4xpqpxsbzjvjx9qsx5d84m9pvn383c5di1nsfh35pig0rzn";
};
# no tests available
doCheck = false;
propagatedBuildInputs = with self; [ pygtk pywebkitgtk pyyaml chardet ];
meta = {
homepage = http://rednotebook.sourceforge.net/index.html;
description = "A modern journal that includes a calendar navigation, customizable templates, export functionality and word clouds";
license = licenses.gpl2;
maintainers = with maintainers; [ tstrobel ];
};
};
我的推导如下:
^{pr2}$requirements.nix
是pypi2nix
的输出,requirements.packages
的类型为“派生列表”。尽管如此,当我将cd放入Rednotebook的结果存储路径时,仍有一个带有一些包装脚本的/bin
目录。我的应用程序的存储路径只有一个lib
一个否/bin
我如何告诉尼克斯帕克斯我有申请?在
正在尝试构建和安装用Python编写的示例服务。 最后在我的安装程序中使用了
buildPythonApplication
要点
如果您正在利用}值:
setuptools
分发应用程序,则需要在setup
调用中使用{src-源代码文件夹 应用程序-入口点模块名称 main-入口点函数的名称
我的整个构建配置是:
^{pr2}$示例包是包含“src”文件夹和设置.py'位于与上面相同的级别'示例.nix'文件。 此时,如果您运行
nix-build sample.nix
,它将为您生成并安装包。但是,要使其在路径上可用,您需要在nix存储中捕获结果路径并运行:有buildPythonPackage和{a2}函数,但在一天结束时,它们都调用mkPythonDerivation。在
一个带有简单Nix包的Python应用程序是Ranger;它使用
buildPythonApplication
。生成的派生包含/nix/store/PACKAGE/bin/
中的包装器buildPythonPackage
将用于库,也就是说,当您希望它在site-packages
中公开其模块时。buildPythonApplication
适用于刚好用Python编写的应用程序。在这种情况下,当您在另一个派生中包含这样的派生时,您不想公开这些库。在这种分离很重要,因为python3环境可能会调用用python2编写的工具,反之亦然。在
请注意,在编写本文时,这个问题还没有完全解决,但是至少}将不包括应用程序及其依赖项。在
python.buildEnv
或{相关问题 更多 >
编程相关推荐