相关代码

main.py

import sys
import os #生成资源文件目录访问路径
#说明: pyinstaller工具打包的可执行文件,运行时sys。frozen会被设置成True
# 因此可以通过sys.frozen的值区分是开发环境还是打包后的生成环境
#
# 打包后的生产环境,资源文件都放在sys._MEIPASS目录下
# 修改main.spec中的datas,
# 如datas=[('res', 'res')],意思是当前目录下的res目录加入目标exe中,在运行时放在零时文件的根目录下,名称为res def resource_path(relative_path):
if getattr(sys, 'frozen', False):
base_path = sys._MEIPASS
else:
base_path = os.path.abspath(".")
return os.path.join(base_path, relative_path) filename = resource_path(os.path.join("res","a.txt"))
print(filename) with open(filename) as f:
lines = f.readlines()
print(lines)
f.close()

res/a.txt

1 2 3
4 5 6

打包流程

  1. 生成main.spec文件:pyi-makespec -F test.py
  2. 修改mian.spec文件,如下
  3. pyinstaller -F main.spec
# -*- mode: python -*-

block_cipher = None

a = Analysis(['main.py'],
pathex=['C:\\Users\\xxx\\PycharmProjects\\Test'],
binaries=[],
datas=[('res', 'res')], //重点
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
[],
name='main',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
runtime_tmpdir=None,
console=True )

pyinstall遇到的问题

描述:

Traceback (most recent call last):
File "C:\Python\lib\runpy.py", line 193, in _run_module_as_main
"__main__", mod_spec)
File "C:\Python\lib\runpy.py", line 85, in _run_code
exec(code, run_globals)
File "C:\Users\10223394\PycharmProjects\Test\venv\Scripts\pyinstaller.exe\__main__.py", line 9, in <module>
File "c:\users\10223394\pycharmprojects\test\venv\lib\site-packages\PyInstaller\__main__.py", line 111, in run
run_build(pyi_config, spec_file, **vars(args))
File "c:\users\10223394\pycharmprojects\test\venv\lib\site-packages\PyInstaller\__main__.py", line 63, in run_build
PyInstaller.building.build_main.main(pyi_config, spec_file, **kwargs)
File "c:\users\10223394\pycharmprojects\test\venv\lib\site-packages\PyInstaller\building\build_main.py", line 838, in main
build(specfile, kw.get('distpath'), kw.get('workpath'), kw.get('clean_build'))
File "c:\users\10223394\pycharmprojects\test\venv\lib\site-packages\PyInstaller\building\build_main.py", line 784, in build
exec(text, spec_namespace)
File "<string>", line 32, in <module>
File "c:\users\10223394\pycharmprojects\test\venv\lib\site-packages\PyInstaller\building\api.py", line 424, in __init__
strip_binaries=self.strip, upx_binaries=self.upx,
File "c:\users\10223394\pycharmprojects\test\venv\lib\site-packages\PyInstaller\building\api.py", line 196, in __init__
self.__postinit__()
File "c:\users\10223394\pycharmprojects\test\venv\lib\site-packages\PyInstaller\building\datastruct.py", line 158, in __postinit__
self.assemble()
File "c:\users\10223394\pycharmprojects\test\venv\lib\site-packages\PyInstaller\building\api.py", line 273, in assemble
pylib_name = os.path.basename(bindepend.get_python_library_path())
File "C:\Python\lib\ntpath.py", line 214, in basename
return split(p)[1]
File "C:\Python\lib\ntpath.py", line 183, in split
p = os.fspath(p)
TypeError: expected str, bytes or os.PathLike object, not NoneType

解决办法:

  这是个已知的故障,官方已经修改,但是没有正式的版本支持。下载https://github.com/Loran425/pyinstaller/tree/14b6e65642e4b07a4358bab278019a48dedf7460中PyInstaller里的bindepend.py文件,然后替换掉本地安装包里的bindepend.py文件即可。

最新文章

  1. [Java面试一]面试复习大纲.
  2. supersr--KVO/KVC
  3. new与malloc的区别
  4. Linux 常见的进程调度算法
  5. dzzoffice注册开启
  6. Linux服务器下没有root权限装Matlab R2013a
  7. java_Eclipse中SVN的安装步骤(两种)和使用方法
  8. php CI 实战教程:如何去掉index.php目录
  9. 201521123004 《Java程序设计》第7周学习总结
  10. Nginx反向代理、负载均衡、动静分离、缓存、压缩、防盗链、跨域访问
  11. C#概念总结(三)
  12. [转] 那些在使用webpack时踩过的坑
  13. python对缩进的严格要求
  14. SQLServer树查询
  15. the usage of String
  16. CentOS7服务器上搭建Gitlab
  17. day1 python简介和入门
  18. 用CI框架向数据库中实现简单的增删改查
  19. 抓其根本(一)(hdu2710 Max Factor 素数 最大公约数 最小公倍数.....)
  20. cannot be cast to javax.servlet.Filter 报错, 原因servlet-api.jar冲突

热门文章

  1. AliOS Things添加环境变量
  2. #PHP 类的多继承实现之 traits.md
  3. TCP实战一(三握四挥、流量控制)
  4. I/O格式化与运算符
  5. eclipse导入git项目
  6. dart快速入门教程 (2)
  7. JQuery UI - draggable参数中文详细说明
  8. 【实践】如何利用tensorflow的object_detection api开源框架训练基于自己数据集的模型(Windows10系统)
  9. Android详细介绍MPAndroidChart-LineChart
  10. 与跨域相关的 jsonp 劫持与 CORS 配置错误