311 lines
8.4 KiB
RPMSpec
311 lines
8.4 KiB
RPMSpec
# -*- mode: python ; coding: utf-8 -*-
|
|
"""
|
|
PyInstaller 打包配置
|
|
"""
|
|
import os
|
|
import sys
|
|
|
|
# 获取项目根目录
|
|
def get_abs_path(path):
|
|
"""获取绝对路径"""
|
|
if os.path.isabs(path):
|
|
return path
|
|
return os.path.join(os.getcwd(), path)
|
|
|
|
a = Analysis(
|
|
['main.py'],
|
|
pathex=[os.getcwd()],
|
|
binaries=[],
|
|
datas=[
|
|
(get_abs_path('api'), 'api'),
|
|
(get_abs_path('core'), 'core'),
|
|
(get_abs_path('handlers'), 'handlers'),
|
|
(get_abs_path('mirrors'), 'mirrors'),
|
|
(get_abs_path('settings.json'), '.'),
|
|
],
|
|
hiddenimports=[
|
|
# aiohttp
|
|
'aiohttp',
|
|
'aiohttp.abc',
|
|
'aiohttp.connector',
|
|
'aiohttp.client',
|
|
'aiohttp.client_proto',
|
|
'aiohttp.client_reqrep',
|
|
'aiohttp.cookiejar',
|
|
'aiohttp.fileresponse',
|
|
'aiohttp.hdrs',
|
|
'aiohttp.http_exceptions',
|
|
'aiohttp.http_parser',
|
|
'aiohttp.http_protocol',
|
|
'aiohttp.http_server',
|
|
'aiohttp.http_websocket',
|
|
'aiohttp.multipart',
|
|
'aiohttp.payload',
|
|
'aiohttp.proxy',
|
|
'aiohttp.streams',
|
|
'aiohttp.tcp_helpers',
|
|
'aiohttp.web',
|
|
'aiohttp.web_app',
|
|
'aiohttp.web_exceptions',
|
|
'aiohttp.web_fileresponse',
|
|
'aiohttp.web_log',
|
|
'aiohttp.web_middlewares',
|
|
'aiohttp.web_protocol',
|
|
'aiohttp.web_request',
|
|
'aiohttp.web_response',
|
|
'aiohttp.web_routedef',
|
|
'aiohttp.router',
|
|
'aiohttp.web_server',
|
|
'aiohttp.web_urldispatcher',
|
|
'aiohttp.web_ws',
|
|
'aiohttp.websocket',
|
|
'aiohttp.websocket_client',
|
|
'aiohttp.websocket_handshake',
|
|
'aiohttp.websocket_protocol',
|
|
# aiohttp.multipart
|
|
'multipart',
|
|
'email.generator',
|
|
'email.policy',
|
|
'email.utils',
|
|
# sqlalchemy
|
|
'sqlalchemy',
|
|
'sqlalchemy.engine',
|
|
'sqlalchemy.engine.base',
|
|
'sqlalchemy.engine.cursor',
|
|
'sqlalchemy.engine.default',
|
|
'sqlalchemy.engine.interfaces',
|
|
'sqlalchemy.engine.row',
|
|
'sqlalchemy.engine.util',
|
|
'sqlalchemy.orm',
|
|
'sqlalchemy.orm.base',
|
|
'sqlalchemy.orm.clear_mappers',
|
|
'sqlalchemy.orm.decl_api',
|
|
'sqlalchemy.orm.declarative',
|
|
'sqlalchemy.orm.descriptor_props',
|
|
'sqlalchemy.orm.interfaces',
|
|
'sqlalchemy.orm.mapper',
|
|
'sqlalchemy.orm.properties',
|
|
'sqlalchemy.orm.query',
|
|
'sqlalchemy.orm.relationships',
|
|
'sqlalchemy.orm.session',
|
|
'sqlalchemy.orm.strategies',
|
|
'sqlalchemy.orm.strategy_options',
|
|
'sqlalchemy.pool',
|
|
'sqlalchemy.pool.base',
|
|
'sqlalchemy.pool.impl',
|
|
'sqlalchemy.dialects',
|
|
'sqlalchemy.dialects.sqlite',
|
|
'sqlalchemy.dialects.postgresql',
|
|
'sqlalchemy.dialects.mysql',
|
|
# apscheduler
|
|
'apscheduler',
|
|
'apscheduler.schedulers',
|
|
'apscheduler.schedulers.background',
|
|
'apscheduler.schedulers.base',
|
|
'apscheduler.schedulers.blocking',
|
|
'apscheduler.triggers',
|
|
'apscheduler.triggers.cron',
|
|
'apscheduler.triggers.date',
|
|
'apscheduler.triggers.interval',
|
|
'apscheduler.executors',
|
|
'apscheduler.executors.pool',
|
|
'apscheduler.job',
|
|
'apscheduler.events',
|
|
# paramiko
|
|
'paramiko',
|
|
'paramiko.transport',
|
|
'paramiko.client',
|
|
'paramiko.config',
|
|
'paramiko.hostkeys',
|
|
'paramiko.message',
|
|
'paramiko.packet',
|
|
'paramiko.primitives',
|
|
'paramiko.util',
|
|
'paramiko.ecdh',
|
|
'paramiko.ed25519key',
|
|
'paramiko.rsakey',
|
|
'paramiko.dsskey',
|
|
'paramiko.pkey',
|
|
'paramiko.agent',
|
|
'paramiko.sftp',
|
|
'paramiko.sftp_attr',
|
|
'paramiko.sftp_handle',
|
|
'paramiko.sftp_server',
|
|
'paramiko.sftp_si',
|
|
'paramiko.ssh_exception',
|
|
'paramiko.auth_handler',
|
|
'paramiko.channel',
|
|
'paramiko.shell',
|
|
'paramiko.exec',
|
|
# requests
|
|
'requests',
|
|
'requests.api',
|
|
'requests.auth',
|
|
'requests.certs',
|
|
'requests.compat',
|
|
'requests.cookies',
|
|
'requests.exceptions',
|
|
'requests.hooks',
|
|
'requests.models',
|
|
'requests.sessions',
|
|
'requests.status_codes',
|
|
'requests.structures',
|
|
'requests.utils',
|
|
# pymysql
|
|
'pymysql',
|
|
'pymysql.connections',
|
|
'pymysql.cursors',
|
|
'pymysql.converters',
|
|
'pymysql.err',
|
|
'pymysql.optionfile',
|
|
'pymysql.protocol',
|
|
'pymysql.times',
|
|
'pymysql.constants',
|
|
'pymysql.charset',
|
|
# psycopg2
|
|
'psycopg2',
|
|
'psycopg2._psycopg2',
|
|
'psycopg2.sql',
|
|
'psycopg2.extensions',
|
|
'psycopg2.extras',
|
|
# cryptography
|
|
'cryptography',
|
|
'cryptography.hazmat',
|
|
'cryptography.hazmat.backends',
|
|
'cryptography.hazmat.primitives',
|
|
'cryptography.hazmat.primitives.asymmetric',
|
|
'cryptography.hazmat.primitives.ciphers',
|
|
'cryptography.hazmat.primitives.hashes',
|
|
'cryptography.hazmat.primitives.serialization',
|
|
'cryptography.hazmat.primitives.kdf.pbkdf2',
|
|
'cryptography.x509',
|
|
'cryptography.x509.name',
|
|
'cryptography.x509.extensions',
|
|
'cryptography.fernet',
|
|
# 其他常用
|
|
'urllib3',
|
|
'urllib3.util',
|
|
'urllib3.exceptions',
|
|
'urllib3.request',
|
|
'urllib3.response',
|
|
'urllib3.poolmanager',
|
|
'charset_normalizer',
|
|
'charset_normalizer.utils',
|
|
'charset_normalizer.models',
|
|
'idna',
|
|
'idna.core',
|
|
'idna.idnadata',
|
|
'cachetools',
|
|
'croniter',
|
|
'psutil',
|
|
'psutil._psutil_linux',
|
|
'psutil._psutil_osx',
|
|
'psutil._psutil_windows',
|
|
'python_multipart',
|
|
'python_multipart.multipart',
|
|
'dataclasses',
|
|
'inspect',
|
|
'concurrent.futures',
|
|
'subprocess',
|
|
'threading',
|
|
'socket',
|
|
'ssl',
|
|
'hmac',
|
|
'hashlib',
|
|
'base64',
|
|
'struct',
|
|
'tempfile',
|
|
'shutil',
|
|
'pickle',
|
|
'json',
|
|
'os',
|
|
'sys',
|
|
'signal',
|
|
'time',
|
|
'datetime',
|
|
'math',
|
|
'logging',
|
|
'warnings',
|
|
'ctypes',
|
|
'ctypes.util',
|
|
'ctypes.wintypes',
|
|
'_ctypes',
|
|
'_socket',
|
|
'_ssl',
|
|
'select',
|
|
'errno',
|
|
'fcntl',
|
|
'grp',
|
|
'pwd',
|
|
'termios',
|
|
'tty',
|
|
'fcntl',
|
|
'resource',
|
|
'msvcrt',
|
|
'win32api',
|
|
'win32con',
|
|
'win32file',
|
|
'pywintypes',
|
|
'pythoncom',
|
|
# pyasn1 (paramiko 依赖)
|
|
'pyasn1',
|
|
'pyasn1.type',
|
|
'pyasn1.codec',
|
|
'pyasn1.codec.der',
|
|
'pyasn1.codec.der.encoder',
|
|
'pyasn1.codec.der.decoder',
|
|
'pyasn1.util',
|
|
'pyasn1.error',
|
|
# bcrypt (cryptography 依赖)
|
|
'bcrypt',
|
|
'bcrypt.__about__',
|
|
# cffi (cryptography 依赖)
|
|
'cffi',
|
|
'cffi.api',
|
|
'cffi.ffiplatform',
|
|
'cffi.backend_ctypes',
|
|
'cffi.recompiler',
|
|
'cffi.verifier',
|
|
# packaging (cryptography 依赖)
|
|
'packaging',
|
|
'packaging.version',
|
|
'packaging.specifiers',
|
|
'packaging.requirements',
|
|
# six (paramiko 依赖)
|
|
'six',
|
|
# ipaddress (paramiko 依赖)
|
|
'ipaddress',
|
|
# json (标准库)
|
|
'json.decoder',
|
|
'json.encoder',
|
|
# typing
|
|
'typing_extensions',
|
|
],
|
|
hookspath=[],
|
|
hooksconfig={},
|
|
runtime_hooks=[],
|
|
excludes=[],
|
|
win_no_prefer_redirects=False,
|
|
win_private_assemblies=False,
|
|
cipher=None,
|
|
noarchive=False,
|
|
)
|
|
|
|
pyz = PYZ(a.pure, a.zipped_data, cipher=None)
|
|
|
|
# 使用 EXE() 创建 --onefile 单文件模式
|
|
exe = EXE(
|
|
pyz,
|
|
a.scripts,
|
|
a.binaries,
|
|
a.zipfiles,
|
|
a.datas,
|
|
name='hyc-download',
|
|
debug=False,
|
|
bootloader_ignore_signals=False,
|
|
strip=False,
|
|
upx=True,
|
|
upx_exclude=[],
|
|
console=True,
|
|
)
|