Python中如何解决打包.py文件到其他电脑运行时编译目录warn-testrun.txt缺失过多的问题?
missing module named 'xxx'的内容也太多了,起码>150 行
贴个前 10 的内容:
missing module named 'multiprocessing.forking' - imported by c:\users\administrator\appdata\local\programs\python\python36\lib\site-packages\PyInstaller\loader\rthooks\pyi_rth_multiprocessing.py (optional)
missing module named multiprocessing.get_context - imported by multiprocessing (top-level), multiprocessing.pool (top-level), multiprocessing.managers (top-level), multiprocessing.sharedctypes (top-level)
missing module named multiprocessing.TimeoutError - imported by multiprocessing (top-level), multiprocessing.pool (top-level)
missing module named multiprocessing.BufferTooShort - imported by multiprocessing (top-level), multiprocessing.connection (top-level)
missing module named multiprocessing.AuthenticationError - imported by multiprocessing (top-level), multiprocessing.connection (top-level)
missing module named multiprocessing.set_start_method - imported by multiprocessing (top-level), multiprocessing.spawn (top-level)
missing module named multiprocessing.get_start_method - imported by multiprocessing (top-level), multiprocessing.spawn (top-level)
missing module named multiprocessing.SimpleQueue - imported by multiprocessing (top-level), concurrent.futures.process (top-level)
missing module named 'win32com.gen_py' - imported by win32com (conditional, optional), c:\users\administrator\appdata\local\programs\python\python36\lib\site-packages\PyInstaller\loader\rthooks\pyi_rth_win32comgenpy.py (top-level)
missing module named pyimod03_importers - imported by PyInstaller.loader.pyimod02_archive (delayed, conditional), c:\users\administrator\appdata\local\programs\python\python36\lib\site-packages\PyInstaller\loader\rthooks\pyi_rth_pkgres.py (top-level)
missing module named 'com.sun' - imported by pkg_resources._vendor.appdirs (delayed, conditional, optional)
missing module named com - imported by pkg_resources._vendor.appdirs (delayed)
脚本状态下,程序运行没有问题
就拿第一个“'multiprocessing”来说,我手动 pip install multiprocessing 都报错了。。。
ERROR: Command errored out with exit status 1:
command: 'c:\users\administrator\appdata\local\programs\python\python36\python.exe' -c 'import sys, setuptools, to
kenize; sys.argv[0] = '"'"'C:\\Temp\\pip-install-bi2klhf4\\multiprocessing\\setup.py'"'"'; __file__='"'"'C:\\Temp\\pip-
install-bi2klhf4\\multiprocessing\\setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().repl
ace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base pip-egg-
info
cwd: C:\Temp\pip-install-bi2klhf4\multiprocessing\
Complete output (6 lines):
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "C:\Temp\pip-install-bi2klhf4\multiprocessing\setup.py", line 94
print 'Macros:'
^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print('Macros:')?
----------------------------------------
ERROR: Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.
很像是 python 版本的问题。。。 但又不能降 python 版本这么折腾。。。
要编译成功,有何办法???
Python中如何解决打包.py文件到其他电脑运行时编译目录warn-testrun.txt缺失过多的问题?
你运行的这个程序用到的 multiprocessing 是 python2.7 的,只能用 python2.7,你在 3.6 里用不了
multiprocessing 3.6 都内置了,pip 安装以前的当然装不上
我遇到过这个问题,通常是因为打包工具没处理好项目结构。核心是要确保打包配置正确包含所有必要的文件。
以PyInstaller为例,这是最常用的解决方案:
# 首先确保你的项目结构清晰:
# your_project/
# ├── main.py # 主程序入口
# ├── config/
# │ ├── settings.py
# │ └── warn-testrun.txt # 你的配置文件
# └── data/
# └── other_files.txt
# 方法1:使用PyInstaller的--add-data参数(命令行方式)
# 在项目根目录执行:
# pyinstaller --onefile --add-data "config/warn-testrun.txt;config" main.py
# 方法2:使用spec文件(更推荐)
# 先生成spec文件:pyinstaller --onefile main.py
# 然后编辑main.spec文件:
# -*- mode: python ; coding: utf-8 -*-
a = Analysis(
['main.py'],
pathex=[],
binaries=[],
datas=[('config/warn-testrun.txt', 'config')], # 关键在这里
hiddenimports=[],
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=[],
noarchive=False,
)
pyz = PYZ(a.pure)
exe = EXE(
pyz,
a.scripts,
a.binaries,
a.datas, # 这里会包含上面datas配置的文件
[],
name='main',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
runtime_tmpdir=None,
console=True,
disable_windowed_traceback=False,
argv_emulation=False,
target_arch=None,
codesign_identity=None,
entitlements_file=None,
)
# 保存后运行:pyinstaller main.spec
# 方法3:在代码中动态处理(如果文件不多)
import sys
import os
def get_resource_path(relative_path):
"""获取资源文件的绝对路径,兼容开发环境和打包后环境"""
if hasattr(sys, '_MEIPASS'):
# 打包后的临时目录
base_path = sys._MEIPASS
else:
# 开发环境
base_path = os.path.abspath(".")
return os.path.join(base_path, relative_path)
# 使用示例
config_file = get_resource_path("config/warn-testrun.txt")
with open(config_file, 'r') as f:
content = f.read()
关键点:确保在打包配置中明确包含所有非.py文件,特别是配置文件、数据文件等。PyInstaller默认只打包.py文件,其他文件需要手动指定。
总结:检查打包配置,确保包含所有必要文件。
看来没办法了,有几个用到的库,只能在 3.6 以上使用。。。。
我来歪个楼,楼主的用户名“administrator”,怕不是暴露了你还在用 XP 😂?
新版 Windows 也一直沿用 administrator 这个用户名啊。。
用这种默认用户名,可以降低终端 prompt,文档作者,配置文件,日志,路径,编译调试信息等各方面暴露个人信息的可能。
没记错的话从 Windows 7 开始就会让用户自己创建一个系统账号了,不会直接使用 Administrator。
另外不想暴露个人信息的话你还可以把用户名设成 123 abc 之类的。
Python 3.5 是最后支持 XP 的版本。
你需要 pyinstaller
印象中用 7 的时候还是用的 administrator,可能不是官方安装系统,后来到 10 是引导建一个普通用户,但也可以手动启用 administrator 并登录啊。。
Win7,我做系统的时候特意用回 Administrator
这不就是用了 pyinstaller 来编译的么?
你需要 pyinstaller +1
你需要新建一个干净的虚拟环境,pyinstaller 好像会把所有的包都打包进去
要彻底解决,只有换 golang

