我有一个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
这里是我使用的示例见链接。
安装 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
文件复制到 machine11.3.登录 machine1 并转到
whl
文件的路径并运行:$ cd path_to_whl_file/ $ pip3 install foo-0.1-py3-none-any.whl
安装 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
就是这样,现在您可以从任何地方运行应用程序(应用程序位于
/usr/bin/
)
希望能回答您的问题并帮助您创建/构建 python3 包。
笔记:它在 Ubuntu、Debian 和 Raspbian 上对我有用。