如何向 debian 包添加 python 包依赖?

如何向 debian 包添加 python 包依赖?

我有一个debian包,其内容要求安装某个 python 包pip installed <python-package>

我应该如何精确配置我的.deb包(可能通过debian/rules)以便<python-package>与包一起安装(即启动时dpkg -i mypackage.deb)?

答案1

这并非易事。中概述了多种可能性这个问题及其答案,但正如 @FerencWagner 所说,最好、最正确的解决方案是将所有依赖项重新打包为 debian 包。

一些 python 包已经作为 debian 包提供,例如 jsonpickle:

$ apt-cache search jsonpickle
python-jsonpickle - Python library for serializing object graphs into JSON (Python 2)
python-jsonpickle-doc - Python library for serializing object graphs into JSON (documentation)
python3-jsonpickle - Python library for serializing object graphs into JSON (Python 3)

所以你应该先寻找它们,也许你不需要自己做任何事情。

答案2

以下是如何将 python3 应用程序从主机打包并部署到另一台 Linux 机器(我们称之为 machine1)的指南。

首先我假设你的 python 应用程序是正确构建的,setup.py这里是我使用的示例见链接

  1. 安装 python3 应用程序依赖项:

    1.1.转到您的“foo”应用程序所在目录setup.py并运行:

    $ cd path_to_foo/foo/
    $ python3 setup.py sdist bdist_wheel
    

    1.2.它将创建一个“dist”文件夹并将foo-0.1-py3-none-any.whl文件复制到 machine1

    1.3.登录 machine1 并转到whl文件的路径并运行:

    $ cd path_to_whl_file/
    $ pip3 install foo-0.1-py3-none-any.whl
    
  2. 安装 python3 应用程序包

    2.1.首先我们需要安装 fpm(在您的主机开发机器上)查看此处以获取更多信息如何使用 FPM 轻松创建多种格式的包

    $ sudo apt-get update
    $ sudo apt-get install ruby-dev build-essential
    $ sudo gem install fpm
    

    2.2.然后转到保存 foo 应用程序的目录并运行:

    $ sudo fpm --python-bin python3 --python-pip pip3 \
      --python-package-name-prefix python3 --no-python-dependencies \
      --python-install-bin /usr/bin -s python -t deb \
      path_to_foo_application/
    

    它应该创建包python3-foo_0.1_all.deb

    2.3.登录machine1,进入deb包路径并安装

    $ cd path_to_deb_package/
    $ sudo dpkg -i python3-foo-_0.1_all.deb
    
  3. 就是这样,现在您可以从任何地方运行应用程序(应用程序位于/usr/bin/

希望能回答您的问题并帮助您创建/构建 python3 包。

笔记:它在 Ubuntu、Debian 和 Raspbian 上对我有用。

相关内容