代码之家  ›  专栏  ›  技术社区  ›  Jokubas11

使用setuptools构建python-debian包

  •  0
  • Jokubas11  · 技术社区  · 3 年前

    使用setuptools构建Debian包。

    我正在开发Linux Mint 20.3。我用python做了一个项目,我想构建一个.deb包。我试着按照网上的指示去做,但每次我做什么都会碰壁。

    My project root directory:
    - env/
    - .git/
    - scripts/
    - src/
    - requirements.txt
    - .gitlab-ci.yml
    - .gitignore
    - setup.py
    

    互联网大多建议使用stdeb。我已经安装了所有需要的依赖项: python-stdeb、fakeroot、python3all、dh-python以及我不记得的所有其他必要的东西。

    我的setup.py非常基础

    from setuptools import setup, find_packages
    
    setup(
        name='my_app',
        version='1.0.0',
        description='My application',
        packages=find_packages(),
        install_requires=['numpy==1.24.2',
                          'opencv-python==4.5.5.64',
                          'pyserial==3.5',
                          'PySide2==5.15.2.1',
                          'pyusb==1.2.1'])
    

    互联网建议运行以下程序:

    python setup.py --command-packages=stdeb.command bdist_deb
    

    最终出现错误:

    python3 setup.py install --force --root=debian/python3-lp5x-factory-app --no-compile -O0 --install-layout=deb --prefix=/usr 
    usage: setup.py [global_opts] cmd1 [cmd1_opts] [cmd2 [cmd2_opts] ...]
       or: setup.py --help [cmd1 cmd2 ...]
       or: setup.py --help-commands
       or: setup.py cmd --help
    
    error: option --install-layout not recognized
    

    Internet建议我从debian/rules文件中删除--install layout=deb,因为它适用于Python 3.3或更低版本,因为我使用的是3.10.10。但是,debian/rules文件是自动生成的,我无法删除它。debian/rrules或debian/control是由python setup.py生成的--命令包=stdeb.command bdist_deb,而不是由我手动生成的

    除此之外,我还有一些应用程序的依赖项,例如: libgirepository1.0-dev,libusb-1.0-0-dev

    Internet还建议将其添加到debian/control中,它是由与以前相同的命令生成的,所以我无法手动附加它。我尝试的任何方法都不起作用,我被卡住了。

    我只需要:

    • 使用setup.py生成.deb
    • 安装libgirepository1.0-dev、libusb-1.0-0-dev和其他依赖项

    什么都不管用

    0 回复  |  直到 3 年前
        1
  •  1
  •   mebuh    2 年前

    假设您使用dh-python中的pybuild进行构建,这看起来像Debian Bug: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1003252

    它建议设置 SETUPTOOLS_USE_DISTUTILS=stdlib 。 这对我在Debian 12上起到了作用,在我的 debian/rules -文件:

    export SETUPTOOLS_USE_DISTUTILS=stdlib
    

    不过,我不确定您是否也可以在不调整规则文件的情况下进行设置。