gpt4 book ai didi

python - 使用 "setup.py develop"确定程序已安装

转载 作者:行者123 更新时间:2023-12-01 03:41:32 24 4
gpt4 key购买 nike

我正在开发一个 Gtk 应用程序,希望使用系统范围的安装版本并同时运行不同的开发版本。

应用程序无法启动两次,因为Gtk.Application将尝试连接到相同的DBus总线并拒绝启动两次。因此我的想法是确定我是否处于“开发模式”,即。 e.该程序是否已使用 ./setup.pydevelop 安装。

我怎样才能实现这个目标?或者是否有另一种更通用的方法来区分程序的开发版本和安装版本?我宁愿避免特殊的 --develop 选项或类似选项,这些选项在开发范围之外是无用的。

最佳答案

由于setuptools的设计方式,开发模式只是一个透明的.egg-link对象,因此在内部实际上不可能确定该包是否存在作为 egg-link 加载(即开发模式;相关 code here 并查看它如何递归调用 find_distributions ,而后者又会再次调用此方法(通过内部导入查找框架)在 generating the metadata object 之前)。

因此,您可以做的是为应用程序的每个版本创建一个不同的 DBus 总线。通常,对于开发来说,您的版本号是不同的,可以通过 pkg_resources API 获取版本号。 .

>>> pkg_resources.get_distribution('setuptools').version
'18.2'

您还可以使用它来生成写入到包的 Egg-info 中的自定义元数据,并且通过它,您的包可以声明自定义项,这些项可以自定义要使用的 Dbus 总线的总线名称,但这需要更多的工作来设置。至少,您可以声明一个 setup.cfg 来标记构建

[egg_info]
tag_build = dev

再次重新运行 setup.pydevelopment ,版本号将包含 dev 后缀,该后缀将显示在 pkg_resources.get_distribution 返回的版本字符串中code> 在你的包的名字上。这并不完全是您想要的,但它可能允许同时执行应用程序的多个版本,无论它们安装在何处或如何安装。考虑可能使用 virtualenvs 在本地安装多个应用程序并希望同时运行它们的用户,在这种情况下,您可能希望将其基于安装位置的哈希值:

>>> pkg_resources.get_distribution('setuptools').location
'/tmp/.env3/lib/python3.5/site-packages'

当然,如果在 site-packages 中找到该包,则可能是作为正确的安装完成的,但 API 中没有任何内容可以告诉您这一点.

关于python - 使用 "setup.py develop"确定程序已安装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39547411/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com