我用Python编写了一个与Qt框架一起使用的实用程序库。我的代码是纯Python,并且与PyQt5和PySide2兼容。我的主模块可以使用python -m
从命令行单独运行,也可以导入另一个项目中。是否有一种干净的方法来指定项目在其轮分布中需要PyQt5或PySide2?
这是我在研究中发现的内容,但我想问一问,是否有比这些选项更好的打包项目的方法:
我可以在项目的源代码分发中为setup.py
添加逻辑以检查PyQt5和PySide2。但是,建议使用转轮分发Python项目的方式,从我可以看出,转轮无法实现这种安装时逻辑。另外,我无法将PySide2或PyQt5指定为依赖项,并在安装说明中建议将其中之一与我的项目一起安装。
答案 0 :(得分:3)
setup(
…
extras_require={
'pyqt5': ['PyQt5'],
'pyside2': ['PySide2'],
},
)
并教您的用户运行二者之一
pip install 'yourpackage[pyqt5]'
或
pip install 'yourpackage[pyside2]'
答案 1 :(得分:0)
如果您不想提出任何严格的要求(这很有意义),那么如果两者都不可用,我只会抛出运行时错误。
例如
try:
import PyQt5 as some_common_name
except ImportError:
try:
import PySide2 as some_common_name
except ImportError:
raise ImportError('Please install either PyQt5 or PySide2') from None
答案 2 :(得分:0)
我的特殊情况有些特殊(因此我不接受这个答案)。我意识到该程序包实际上在做两件事:充当库和充当命令行工具。我决定将其分为两个包:package
和package-cli
。 package
没有明确依赖PyQt5或PySide2,但指定必须在文档中安装其中之一。由于package
是一个库,因此打算将其集成到另一个项目中,很容易在package
中一起列出PyQt5
和requirements.txt
。对于package-cli
,我只选择PyQt5
或PySide2
中的一个作为显式依赖项。 package-cli
取决于package
和PyQt5
,仅添加console_script来调用package
中的主模块。