Python 绝对进口和入口点
因此,我试图通过从小型脚本和web开发转移到桌面应用程序来扩展我的Python知识和技能,并且在理解Python 绝对进口和入口点,python,Python,因此,我试图通过从小型脚本和web开发转移到桌面应用程序来扩展我的Python知识和技能,并且在理解setup.py的入口点以及它们对导入的影响方面遇到了一些困难。我也不太了解导入在Python中是如何工作的,这是没有帮助的 我的困惑来自于查看一个大型桌面应用程序的示例代码,特别是一个用Python编写的torrenting应用程序 查看其代码,似乎其自身模块的所有导入都是绝对的,例如: # deluge/core/core.py import deluge.common from deluge
setup.py
的入口点以及它们对导入的影响方面遇到了一些困难。我也不太了解导入在Python中是如何工作的,这是没有帮助的
我的困惑来自于查看一个大型桌面应用程序的示例代码,特别是一个用Python编写的torrenting应用程序
查看其代码,似乎其自身模块的所有导入都是绝对的,例如:
# deluge/core/core.py
import deluge.common
from deluge.core.eventmanager import EventManager
但有趣的是,setup.py
中定义的所有入口点在程序中也更深入:
# setup.py
entry_points = {
'console_scripts': [
'deluge-console = deluge.ui.console:start',
'deluge-web = deluge.ui.web:start',
'deluged = deluge.core.daemon_entry:start_daemon'
],
'gui_scripts': [
'deluge = deluge.ui.ui_entry:start_ui',
'deluge-gtk = deluge.ui.gtkui:start'
],
'deluge.ui': [
'console = deluge.ui.console:Console',
'web = deluge.ui.web:Web',
'gtk = deluge.ui.gtkui:Gtk',
],
}
据我所知,根据答案,这通常是不可能的。要使用绝对导入,程序必须从项目根目录中的文件启动
就我的理解而言,Florge必须以某种方式更改其PYTHONPATH,例如使用sys.path
,但是搜索代码只能找到它的一个实例,但它似乎只与文档相关,而不是实际的软件代码
那么,如何在模块中更深层地为Python程序设置入口点,但使用来自项目根目录的绝对导入呢?洪水似乎已经做到了这一点,但我不知道如何,我想在我的项目中这样做
作为一个附带问题,如果你知道其他任何用Python编写的大型桌面应用程序,我可以看看它们的例子,如果你告诉我,我会很高兴:)
欢呼声所有这些实际上都在做同样的事情 在入口点我们有一条像这样的线
'deluge-console = deluge.ui.console:start'
它正在访问顶级包名flouge。在其中,它进入ui模块,其中有一个名为console.py的文件。该文件中有“开始”的定义。安装后,当从命令行调用时,您将访问已安装的python模块,并最终访问要运行的函数
在文件本身中,我们可以看到这样的行
from deluge.core.eventmanager import EventManager
它进入安装包洪水。进入模块“core”,它将找到一个名为eventmanager.py的文件。在该文件中,我猜有一个名为EventManager的类
在每种情况下,您都在访问已安装的软件包,并提供有关模块和子模块的信息,最后是您想要的实际对象、函数和类。所有这些实际上都在做完全相同的事情 在入口点我们有一条像这样的线
'deluge-console = deluge.ui.console:start'
它正在访问顶级包名flouge。在其中,它进入ui模块,其中有一个名为console.py的文件。该文件中有“开始”的定义。安装后,当从命令行调用时,您将访问已安装的python模块,并最终访问要运行的函数
在文件本身中,我们可以看到这样的行
from deluge.core.eventmanager import EventManager
它进入安装包洪水。进入模块“core”,它将找到一个名为eventmanager.py的文件。在该文件中,我猜有一个名为EventManager的类
在每种情况下,您都要访问已安装的软件包,并提供有关模块和子模块的信息,最后是实际的对象、函数和类,无论您想要什么