Python setuptools入口点和子应用程序作为子进程

Python setuptools入口点和子应用程序作为子进程,python,subprocess,setuptools,entry-point,pkg-resources,Python,Subprocess,Setuptools,Entry Point,Pkg Resources,我正在Windows上工作,并开发一个将分发给最终用户的应用程序 我有一个setupttools发行版,其中包含大量python包。这个发行版声明了一些控制台脚本入口点,这些入口点指向代码中的各种函数 其中一个入口点注定是一个更新程序应用程序。我目前正在使用subprocess作为子进程启动它,并指定python脚本的完整路径 我想做的是使用生成的setuptools入口点存根可执行文件作为要启动的子流程 我可以通过以下方式获取子应用程序的入口点: import pkg_resources up

我正在Windows上工作,并开发一个将分发给最终用户的应用程序

我有一个setupttools发行版,其中包含大量python包。这个发行版声明了一些控制台脚本入口点,这些入口点指向代码中的各种函数

其中一个入口点注定是一个更新程序应用程序。我目前正在使用subprocess作为子进程启动它,并指定python脚本的完整路径

我想做的是使用生成的setuptools入口点存根可执行文件作为要启动的子流程

我可以通过以下方式获取子应用程序的入口点:

import pkg_resources
updatefunc = pkg_resources.load_entry_point('iti_reporter', 'console_scripts', 'my_update_ui')
这给了我python函数。从这个函数到驻留在我的venv中的生成的setuptools脚本包装器有什么方法吗


感谢您的帮助。

通过执行脚本本来可以执行的操作来解决问题:

def _get_entry_script(dist, entrytype, entryname):
    import pkg_resources
    mainfunc = pkg_resources.load_entry_point(dist, entrytype, entryname)
    entry_load_script = """import sys; from pkg_resources import load_entry_point;
    sys.exit(
        load_entry_point('%s', '%s', '%s')()
    )"""
    script = entry_load_script%(dist, entrytype, entryname)
    script = ''.join(x.strip() for x in script.split('\n') if x.strip())
    return script

def _get_updater_script_arg_dev():
    return _get_entry_script('mydist', 'console_scripts', 'mypkg_update_ui')

def launch_updater():
    cmd = (os.path.abspath(sys.executable), '-c', _get_updater_script_arg_dev(), '--arg1', '--arg2')
    return subprocess.Popen(cmd)

通过执行脚本无论如何都会执行的操作来解决这个问题:

def _get_entry_script(dist, entrytype, entryname):
    import pkg_resources
    mainfunc = pkg_resources.load_entry_point(dist, entrytype, entryname)
    entry_load_script = """import sys; from pkg_resources import load_entry_point;
    sys.exit(
        load_entry_point('%s', '%s', '%s')()
    )"""
    script = entry_load_script%(dist, entrytype, entryname)
    script = ''.join(x.strip() for x in script.split('\n') if x.strip())
    return script

def _get_updater_script_arg_dev():
    return _get_entry_script('mydist', 'console_scripts', 'mypkg_update_ui')

def launch_updater():
    cmd = (os.path.abspath(sys.executable), '-c', _get_updater_script_arg_dev(), '--arg1', '--arg2')
    return subprocess.Popen(cmd)