在Nixpkgs中,是什么使得一个python衍生物成为应用程序而不是库?

2024-06-06 12:55:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图为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.nixpypi2nix的输出,requirements.packages的类型为“派生列表”。尽管如此,当我将cd放入Rednotebook的结果存储路径时,仍有一个带有一些包装脚本的/bin目录。我的应用程序的存储路径只有一个lib一个否/bin

我如何告诉尼克斯帕克斯我有申请?在


Tags: name文档路径应用程序示例binpackageswith
3条回答

正在尝试构建和安装用Python编写的示例服务。 最后在我的安装程序中使用了buildPythonApplication

要点

如果您正在利用setuptools分发应用程序,则需要在setup调用中使用{}值:

from distutils.core import setup
setup(
...
entry_points = {
  'console_scripts': ['sample_module = src.app:main']
}

src-源代码文件夹 应用程序-入口点模块名称 main-入口点函数的名称

我的整个构建配置是:

^{pr2}$

示例包是包含“src”文件夹和设置.py'位于与上面相同的级别'示例.nix'文件。 此时,如果您运行nix-build sample.nix,它将为您生成并安装包。但是,要使其在路径上可用,您需要在nix存储中捕获结果路径并运行:

nix-env -i <nix_store_path>

buildPythonPackage和{a2}函数,但在一天结束时,它们都调用mkPythonDerivation。在

一个带有简单Nix包的Python应用程序是Ranger;它使用buildPythonApplication。生成的派生包含/nix/store/PACKAGE/bin/中的包装器

buildPythonPackage将用于库,也就是说,当您希望它在site-packages中公开其模块时。buildPythonApplication适用于刚好用Python编写的应用程序。在这种情况下,当您在另一个派生中包含这样的派生时,您不想公开这些库。在

这种分离很重要,因为python3环境可能会调用用python2编写的工具,反之亦然。在

请注意,在编写本文时,这个问题还没有完全解决,但是至少python.buildEnv或{}将不包括应用程序及其依赖项。在

相关问题 更多 >