【问题标题】:Python and Pyinstaller: include binary application in codePython 和 Pyinstaller:在代码中包含二进制应用程序
【发布时间】:2016-03-21 10:48:56
【问题描述】:

我有一个小应用程序。为了保护,我使用 c:/hwid.exe。应用程序返回 pc 的 HWID。示例代码:

def HWID_LIC():
    try:
        if hashlib.md5(open('c:\hwid.exe', 'rb').read()).hexdigest() != 'bca173dc':
            sys.exit(1)
        out = os.popen("c:\hwid.exe").read().strip()
        if out not in lic:
            sys.exit(1)
    except:
        sys.exit(1)

HWID_LIC()

我想在我的应用程序中包含 hwid.exe,并且需要将解决方案全部放在一个文件中。可以在 Python 中做到这一点吗? hwid.exe 有 30 kb。

【问题讨论】:

    标签: python pyinstaller hwid


    【解决方案1】:

    这是可能的。您需要在 sys._MEIPASS 中搜索您的 hwid.exe

    import sys
    import os
    import hashlib
    
    def HWID_LIC():
        if os.path.isfile('hwid.exe'):
            print('file found in .')
        else:
            print('file not found in .')
    
        if os.path.isfile(sys._MEIPASS + os.sep + 'hwid.exe'):
            print('file found in sys._MEIPASS')
        else:
            print('file not found')
        print(hashlib.md5(open(sys._MEIPASS + os.sep + 'hwid.exe', 'rb').read()).hexdigest())
    
    
    if __name__ == '__main__':
        HWID_LIC()
    

    示例规范文件:

    # -*- mode: python -*-
    a = Analysis(['test.py'],
                 pathex=[],
                 hiddenimports=[],
                 runtime_hooks=None)
    import platform
    if platform.system().find("Windows")>= 0:
        a.datas = [i for i in a.datas if i[0].find('Include') < 0]
    a.binaries = [x for x in a.binaries if not x[0].startswith("scipy")]
    a.binaries = [x for x in a.binaries if not x[0].startswith("numpy")]
    a.datas += [('hwid.exe','.\\hwid.exe','DATA'),]
    pyz = PYZ(a.pure)
    exe = EXE(pyz,
              a.scripts,
              a.binaries,
              a.zipfiles,
              a.datas,
              name='test.exe',
              debug=False,
              strip=None,
              clean=True,
              upx=False,
              console=True)
    

    并创建onefile exe whith

    pyinstaller t_onefile.spec
    

    执行 test.exe 时你会看到:

    j:\tmp>test.exe
    file not found in .
    file found in sys._MEIPASS
    754222d71581010a45732c471437ecf7
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-03
      • 2014-08-29
      • 1970-01-01
      • 1970-01-01
      • 2017-12-11
      • 1970-01-01
      相关资源
      最近更新 更多