我正在开发Windows并开发一个将分发给最终用户的应用程序。
我有一个包含大量python包的setupttools发行版。此发行版声明了一些指向我的代码中各种函数的console_scripts入口点。
其中一个入口点注定是更新程序应用程序。我目前正在使用子进程将其作为子进程启动,并指定python脚本的完整路径。
我想做的是使用生成的setuptools entrypoint stub可执行文件作为要启动的子进程。
我可以通过以下方式获取子应用程序的入口点:
import pkg_resources
updatefunc = pkg_resources.load_entry_point('iti_reporter', 'console_scripts', 'my_update_ui')
它为我提供了python函数。有没有办法从这个函数转到我的venv中生成的setuptools脚本包装器?
感谢您的帮助。
答案 0 :(得分:1)
通过执行脚本本来会做的事情来计算它:
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)