如何构建一个非单一文件 exe 并将其从 python 脚本添加到系统路径?

问题描述 投票:0回答:1

任何其他答案都会将 exe 添加到当前 python 会话的路径,并且只有“setx”会将其添加到 USER 路径(删除以前的路径,除非你将它们保存在某个地方)。

我当前正在使用 cx_freeze,并且有一个选项可以添加到 .msi 构建器而不是 .exe 构建器的系统路径。我的目标是让 exe 变得轻量级,同时可以从任何地方访问。我还计划使其通用,这样它就可以在 Windows 和 Linux 上运行 我尝试使用

os.environ['PATH'] = os.environ['PATH'] += os.pathsep(directory)

但这只会为当前的 python 会话编辑它

python cx-freeze
1个回答
0
投票
import winreg
def main():
    def add_to_path(directory, user=False):
        if user:
            key = winreg.HKEY_CURRENT_USER
            subkey = 'Environment'
        else:
            key = winreg.HKEY_LOCAL_MACHINE
            subkey = r'SYSTEM\CurrentControlSet\Control\Session Manager\Environment'

        with winreg.OpenKey(key, subkey, 0, winreg.KEY_ALL_ACCESS) as regkey:
            path_value, _ = winreg.QueryValueEx(regkey, 'Path')
            print(path_value)
            path_value += ';' + directory
            winreg.SetValueEx(regkey, 'Path', 0, winreg.REG_EXPAND_SZ, path_value)

    # Example usage
    directory_path = filepath
    add_to_path(directory_path)
if __name__ == '__main__':
    import subprocess
    subprocess.run('pip install pyuac'.split())
    subprocess.run('pip install pypiwin32'.split())
    #require admin to make sure modules are installed correctly
    import pyuac 

    if not pyuac.isUserAdmin():
        pyuac.runAsAdmin()
    else:
        main()

这似乎适用于 Windows,需要管理员

© www.soinside.com 2019 - 2024. All rights reserved.