首页 > 编程语言 >【python】打包神器--pyinstaller

【python】打包神器--pyinstaller

时间:2024-09-06 22:47:12浏览次数:8  
标签:文件 pyinstaller python text -- path os 打包

  • 1:简介
    • pyinstaller是一个python的第三方库,它能够在Windows、Linux、 Mac OS 等操作系统下将 Python 源文件打包,通过对源文件打包, Python 程序可以在没有安装 Python 的环境中运行,也可以作为一个独立文件方便传递和管理。在Windows上使用就打包成.exe文件。在Mac上使用就打包成mac app。

    • 在Windows中打的包,只能在Windows中使用,在Mac中打的包只能在Mac中使用

    • 最好配合虚拟环境使用

- 环境crm
	- python.exe
	- Scripts
		- pip.exe
		- pyinstaller.exe
	- Lib
		- site-package
			- requests
			- flask
			- pyinstaller
  • 2.多文件打包
    • 2.1:安装pyinstaller,pip install pyinstaller
    • 2.2:写一个简单脚本
import requests

pram = {
    'query':"哈哈",
}
url = 'https://www.sogou.com/web'

response = requests.get(url=url,params=pram)
page_text = response.text
print(page_text)

input('按回车键结束任务.....')
  • 2.3:终端执行,pyinstaller -D demo.py,执行完成后,会生成下面几个文件,dist文件夹下,就会生成我们需要的exe执行文件

  • 2.4:执行结束后,将dist下面的文件打包给其他人,直接点击可执行文件即可执行。

  • 3.单文件打包

    • 3.1:上面的打包,会生成很多文件,dist下面的所有文件必须一起打包给别人才能执行,这样比较麻烦,如果能够打包成一个可执行文件,就会更方便了。
    • 3.2:终端执行,pyinstaller -F demo.py
    • 3.3: 注意,**打包成一个文件,并不代表只是单独的一个文件,当我们执行程序时,也会临时生成多个文件,只是执行完就删除了,我们无感知
  • 4.路径问题,如果我们的代码需要依赖其它文件,处理方法

    • 4.1:多文件打包
      • 4.1.1:代码及依赖文件
import requests
import os

pram = {
    'query':"哈哈",
}

BASE_DIR = os.path.dirname(os.path.abspath(__file__))
with open(os.path.join(BASE_DIR, "info.txt")) as f:
    data = f.read()
url = data.strip()

response = requests.get(url=url,params=pram)
page_text = response.text
print(page_text)

input('按回车键结束任务.....')


- 4.1.2:打包后,直接将依赖文件放到 _internal文件夹中

  • 4.2:单文件打包
    • 4.2.1:单文件打包后,无论怎么放置依赖文件都不行,看下面的报错信息,这就是我们上文所提到的临时目录,这里找不到info.txt所以报错
    • 4.2.2:这里有几种解决方法
      • 1):取巧,将依赖文件放置到D盘固定目录下,脚本中也修改为固定路径,缺点:数据与代码分开,不便于管理
      • 2):sys.argv[0]表示代码本身文件路径
        • 修改路径:BASE_DIR = os.path.dirname(os.path.realpath(sys.argv[0]))
        • 打包后,将依赖文件放到可执行文件同目录即可
      • 3):frozen,打包后,依赖文件放置到可执行文件同目录也可以正常执行
import sys
if getattr(sys, 'frozen', False): # True
    print('running in a PyInstaller bundle')   # 使用pyinstaller执行
else: # False
    print('running in a normal Python process')    # python正常的文件
import sys
import requests
import os

pram = {
    'query':"哈哈",
}
# BASE_DIR = os.path.dirname(os.path.realpath(sys.argv[0]))
if getattr(sys, 'frozen', False):
    # pyinstaller打开
    BASE_DIR = os.path.dirname(sys.executable)
else:
    # py文件路径
    BASE_DIR = os.path.dirname(os.path.abspath(__file__))

# https://www.sogou.com/web
with open(os.path.join(BASE_DIR, "info.txt")) as f:
    data = f.read()
url = data.strip()

response = requests.get(url=url,params=pram)
page_text = response.text
print(page_text)

input('按回车键结束任务.....')
  • 5.基于反射的动态模块加载
    • 5.1:目录及脚本
    • 5.2:这里我们在打包时,pyinstaller是不可能自动帮你选择模块的
    • 5.3:打包
    • 5.4:基于配置文件打包,第3步中打包后,删除其它文件,保留spec文件即可


    • 5.5:运行

标签:文件,pyinstaller,python,text,--,path,os,打包
From: https://www.cnblogs.com/xwltest/p/18401185

相关文章

  • 代码整洁之道--读书笔记(3)
    代码整洁之道简介:本书是编程大师“Bob大叔”40余年编程生涯的心得体会的总结,讲解要成为真正专业的程序员需要具备什么样的态度,需要遵循什么样的原则,需要采取什么样的行动。作者以自己以及身边的同事走过的弯路、犯过的错误为例,意在为后来者引路,助其职业生涯迈上更高台阶。本......
  • Speaking-Asking for or giving directions
    1)onthesecondfloor2)taketheelevatorontheelevator 3)whenyougetoffthe elevator,turnleft4)attheendofthecorridorontherightside5)turnrightatthecornerandgostraightahead.It'sonyourright,nexttothebakeryahead......
  • Maven使用指南的笔记
    文档索引Mavenin5Minutes篇幅很短,快速上手,不求甚解。执行如下命令,创建项目的基础配置。mvnarchetype:generate-DgroupId=com.mycompany.app-DartifactId=my-app-DarchetypeArtifactId=maven-archetype-quickstart-DarchetypeVersion=1.5-DinteractiveMode=false......
  • 编码规范
    编码规范华为的编码规范主要包括以下几个方面:命名约定:变量、函数等命名应清晰、明了,有明确含义,避免使用单个字符或容易混淆的缩写。常量命名应全部大写,单词间用下划线分隔。文件命名应遵循特定规则,如C文件以.cpp结尾,头文件以.h结尾。排版格式:使用空格进行缩进,每次缩进4个空格......
  • .Fundamentals.of.Software.Architecture.
    研究背景研究问题:本书旨在解决软件架构师在职业发展过程中面临的挑战,特别是如何从一个技术专家转变为一名能够领导团队并做出战略决策的架构师。研究难点:该问题的研究难点包括:软件架构的定义不明确,角色责任广泛且不断扩展,软件开发生态系统快速变化,以及许多过时的技术和解......
  • 软考冲冲冲
    摘要1.交代自己做了项目,自己是做什么的(一般是架构师)2.我在这个项目里面,用到了哪些与题目相关的技术3.项目很成功,客户很开心,老板很开心正文1.我现在在哪里工作,是个啥职位(100字左右,注意数据脱敏,不要透露完全真实的项目名称和个人、公司信息,比如用某某代替)2.......
  • 子集卷积 学习笔记
    如果没有交集的情况,就可以做或运算卷积考虑交集,没有交集=大小和相同依次考虑集合的大小为0,1,...,n对每种情况,构造长度为(1<<n)的集合幂级数,只对size=i赋值枚举答案中集合的大小为0,1,...,n对每个i,枚举f中的贡献是(j),g中的贡献是(i-j)让(j)和(i-j)做或运算卷积,答案一定合法......
  • 大数相加
    leetcode刷题1、大数相加给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字0之外,这两个数都不会以0开头。输入:l1=[2,4,3],l2......
  • .Software.Architecture.The.Hard.Parts.
    研究背景研究问题:本文研究了现代分布式架构中的软件架构设计问题,特别是如何在没有“最佳实践”的情况下进行架构决策。作者探讨了架构量子(architecturequantum)的概念,分析了静态和动态耦合,并提出了如何进行架构分解和组件化。研究难点:该问题的研究难点包括:分布式架构的复......
  • 单点登录SSO
    单点登录(SingleSign-On,简称SSO)是一种会话和用户身份验证技术,它允许用户通过一次登录访问多个应用程序和服务。什么是单点登录?单点登录是指用户只需要在一个地方(如一个网站或一个应用程序)进行一次身份验证(通常是通过用户名和密码),就可以在不需要再次输入凭证的情况下访问多......