根据条件安装依赖项

时间:2020-07-18 02:20:52

标签: python pip setuptools

我有一个Python软件包P,它具有需求A和需求B3.4,但是A具有需求B4.1。但是,我知道P在某些情况下可以与B4.1配合使用。我希望能够点安装安装软件包P,并且仅在目标环境中找不到B3.4的另一个版本时才安装B

我尝试了以下操作:

  • setuptools.command.install.install继承以覆盖安装命令,如下所述:https://blog.niteo.co/setuptools-run-custom-code-in-setup-py/。我尝试在B之前和之后检查并安装install.run
  • 如果导入未成功,则尝试导入B并添加B3.4作为要求。事实证明,即使已安装B3.4,也总是添加B4.1

是否有任何原因可能导致它不起作用?我还有什么其他选择?

谢谢!

1 个答案:

答案 0 :(得分:1)

我认为您没有任何 clean 解决方案,您将不得不使用一些技巧。

涉及在构建时进行动态检查的解决方案(即<View style={styles.contentContainer}> <View style={styles.dateContainer}> <Text style={styles.dateText}>a few seconds ago</Text> </View> <TouchableOpacity onPress={() => {}}> <Text style={styles.item}>this is some text input</Text> </TouchableOpacity> </View> const styles = StyleSheet.create({ contentContainer: { flex: 1, }, item: { padding: 16, fontWeight: 'bold', borderColor: '#bbb', borderWidth: 1, borderStyle: 'solid', borderRadius: 10, }, dateContainer: { flex: 1, paddingHorizontal: 2, marginTop: 16, alignSelf: 'flex-end', }, dateText: { color: '#adadad', }, }); 中的代码)非常有限,因为一旦构建了轮子,它们就无法工作。

在运行时进行动态检查的解决方案不是最佳实践,并且存在很多问题(加载在进程中安装了模块的过程很棘手)

我现在想到的一种可能的解决方法是将setup.py上的 P 的要求移到可选的依赖项 ),但它也有明显的局限性。只要在 P 的文档中对其进行了明确说明,并且明确说明了其副作用,我认为这是公平的游戏。