首页 > 编程语言 >Python基础知识-7(打包成EXE)

Python基础知识-7(打包成EXE)

时间:2024-08-31 18:59:38浏览次数:10  
标签:文件 EXE title Python 基础知识 -- install pip import

(目录)


一、python处理各种格式文件的模块

  • csv 处理CSV文件。
  • xml.etree.ElementTree,xml.dom,xml.sax 处理XML文件。前两者会将整个XML文件载入内存,最后一个是循序读入。
  • json 处理JSON文件。
  • yaml 处理YAML文件
  • tablib 处理:CSV,JSON,YAML,Excel,Pandas DataFrame
  • configparser 处理Windows风格的.ini文件
  • sqlite3 处理SQLite

二、取得时间戳

import time
now = time.time()
print("Current timestamp is:", now)

三、模拟HTTP的客户端

安装requests第三方包

pip install requests
  • 查询本机公网地址
import requests

print("发送GET请求\n")
url = "https://myip.ipip.net"
response = requests.get(url)
contents = response.text
print(contents)
  • 书上的两个例子
import json
import sys
import requests

def search(title):
    url = "http://archive.org/advancedsearch.php"
    params = {"q": f"title:({title})",
              "output": "json",
              "fields": "identifier,title",
              "rows": 50,
              "page": 1,}
    resp = requests.get(url, params=params)
    return resp.json()

if __name__ == "__main__":
    title = sys.argv[1]
    data = search(title)
    docs = data["response"]["docs"]
    print(f"Found {len(docs)} items, showing first 10")
    print("identifier\ttitle")
    for row in docs[:10]:
        print(row["identifier"], row["title"], sep="\t")
"""Find a video at the Internet Archive
by a partial title match and display it."""

import sys
import webbrowser
import requests

def search(title):
    """Return a list of 3-item tuples (identifier,
       title, description) about videos
       whose titles partially match :title."""
    search_url = "https://archive.org/advancedsearch.php"
    params = {
        "q": "title:({}) AND mediatype:(movies)".format(title),
        "fl": "identifier,title,description",
        "output": "json",
        "rows": 10,
        "page": 1,
        }
    resp = requests.get(search_url, params=params)
    data = resp.json()
    docs = [(doc["identifier"], doc["title"], doc["description"])
            for doc in data["response"]["docs"]]
    return docs

def choose(docs):
    """Print line number, title and truncated description for
    each tuple in :docs. Get the user to pick a line
    number. If it's valid, return the first item in the
    chosen tuple (the "identifier"). Otherwise, return None."""
    last = len(docs) - 1
    for num, doc in enumerate(docs):
        print(f"{num}: ({doc[1]}) {doc[2][:30]}...")
    index = input(f"Which would you like to see (0 to {last})? ")
    try:
        return docs[int(index)][0]
    except:
        return None

def display(identifier):
    """Display the Archive video with :identifier in the browser"""
    details_url = "https://archive.org/details/{}".format(identifier)
    print("Loading", details_url)
    webbrowser.open(details_url)

def main(title):
    """Find any movies that match :title.
       Get the user's choice and display it in the browser."""
    identifiers = search(title)
    if identifiers:
        identifier = choose(identifiers)
        if identifier:
            display(identifier)
        else:
            print("Nothing selected")
    else:
        print("Nothing found for", title)

if __name__ == "__main__":
    main(sys.argv[1])

四、测试用Web服务器

  • 使用python自带装备http.server
# 使用默认的8000端口
python -m http.server

# 指定端口8888
python -m http.server 8888

使用Ctrl + c退出。 测试

curl -s --head http://localhost:8000
curl -s -I http://localhost:8000
echo "" | telnet 127.0.0.1 8001
curl telnet://hostname:port
  • 使用bottle 安装软件包
pip install bottle

配置脚本

from bottle import route, run

@route("/")
def home():
    return "http通的"

run(host="localhost", port=9999)

启动并测试

python demo.py
curl http://localhost:9999

测试脚本

import requests

try:
    url = "https://www.sina.com"
    resp = requests.get(url)
    if resp.status_code == 200:
        if len(m := resp.text) < 20:
            print(m)
        else:
            print(f"Header: {resp.headers}\n")
            print(f"Content: {resp.text[:20]}...")

except requests.exceptions.ConnectionError:
    print("服务未启动")

五、python的主流Web框架

  • Flask 她在易用性和丰富性之间取得了平衡。
pip install flask
  • Django 特别适合于大型站点。有内建数据库支持。

六、工具链的使用

1. pip

从Python3.4开始Python自带pip工具。 基本使用

pip install flask
pip uninstall flask

pip install flask==0.9.0
pip install 'flask>=0.9.0' # 避免将>解释为输出重定向

pip freeze > requirements.txt
pip install -r requirements.txt

pip install --upgrade pip
pip install --upgrade flas

2. pipenv

pipenv结合了pip和virtualenv的特性。

pip install pipenv

参考:https://blog.csdn.net/master_hunter/article/details/128198145

3. 源码安装

下载源码,解压zip或tar文件,在包含setup.py的目录中运行

python setup.py install

4. IPython

是python shell的增强版。

pip install ipython

5. 将python项目打包为whl文件

将 Python 项目(类或函数模块)代码打包成 .whl 文件(Wheel 文件)是为了方便在其他地方安装和使用你的 Python 应用程序或库。以下是逐步说明如何将 Python 代码打包成 .whl 文件:

# 步骤1:安装 wheel 模块
pip install wheel

# 步骤2:进入项目目录
cd xxx

# 步骤3:创建 setup.py 文件
# 在项目目录中创建一个名为 setup.py 的文件,并添加以下内容:
from setuptools import setup, find_packages

setup(
    name='your_project_name',
    version='1.0',
    packages=find_packages(),
)

# 将 your_project_name 替换为你的项目名称。

# 步骤4:构建 .whl 文件
# 在命令行中,进入项目目录,并运行以下命令来构建 .whl 文件:
python setup.py bdist_wheel

# 步骤5:查找 .whl 文件
# 构建成功后,你将在 dist 文件夹中找到生成的 .whl 文件,
# 其文件名格式为 <your_project_name>-<version>-py3-none-any.whl。

# 步骤6:安装 .whl 文件
pip install dist/your_project_name-1.0-py3-none-any.whl

还有一种方法是借助于build和pyproject.toml

可参考:https://blog.csdn.net/weixin_42439274/article/details/140437458

6. 如何将python项目打包为exe文件

要将Python项目打包为exe文件,并尽可能地减小包的体积,可以使用工具如PyInstaller或者cx_Freeze,小众的还有py2exe。

6.1 使用PyInstaller打包
# 安装软件包
pip install pyinstaller -i https://mirrors.aliyun.com/pypi/simple

# 打包为控制台程序——提供console控制台窗口。参数c可省略。
pyinstaller -Fc -i your_ico.ico your_script.py

# 打包不提供console控制台窗口
pyinstaller -Fw -i your_ico.ico your_script.py

# 借助生成的spec文件打包
# 参考:https://blog.csdn.net/qq_45956730/article/details/139992894
pyinstaller your_script.spec

PyInstaller会在项目目录中生成一个dist目录,在这个目录里你会找到打包好的EXE文件。 --onefile参数(-F)指示PyInstaller创建一个单一的可执行文件,如果你想要一个包含所有依赖的文件夹,可以省略这个参数。

6.2 Pyinstaller打包过程中要注意的问题
  • 打包文件路径中不能出现中文
  • 缺少导入hook文件 有时即使打包成功了,在运行exe时候,还是会有报错并闪退。如果报错为:FileNotFoundError: [Errno 2] No such file or directory:…… 那是缺少hook文件,要在pyinstaller的安装路径里的hook增加一个自定义的hook。 hook文件的命名规范为: hook-【库名】.py。 例如以我在打包程序中用了结巴分词这个功能库为例,那我要建立一个hook-jieba.py,并写入:
from PyInstaller.utils.hooks import collect_data_files
datas = collect_data_files("jieba")

然后放到~\Lib\site-packages\PyInstaller\hooks中去,再次运行pyinstaller打包既可解决该问题。

  • 缺少导入功能库模块 如果报错为 no moduler named “pandas._libs.skiplist”,那就要手动import库,解决方法打开生成的spec文件,找到 hiddenimports=[],加上要添加的库,将其改动如下,hiddenimports=["pandas._libs.skiplist"],然后删除dist里面的exe文件,重新用spec文件打包,pyinstaller **.spec。即可解决该问题。
  • 解决生成的EXE体积过大的问题 可以借助虚拟环境,在纯净的虚拟环境中按需安装依赖包,然后打包成EXE。主要就是减少无关包的安装——pyinstaller是将整个运行环境进行打包。

七、使用Nuitka将Python项目打包为EXE

Nuitka是将python源码转成C++(这里得到的是二进制的pyd文件),然后再编译成可执行文件。

可以参考:https://www.lixiaofei2yy.website/python%E7%9A%84%E6%89%93%E5%8C%85%E7%A5%9E%E5%99%A8nuitka 安装包

pip install Nuitka

需要下载C++的编译器,比如‌Visual Studio 2022默认的C++编译器,MinGW64或者clang++。 打包命令

nuitka --standalone --show-memory --show-progress --nofollow-imports --plugin-enable=qt-plugins --follow-import-to=utils,src --output-dir=out --windows-icon-from-ico=./logo.ico demo.py

参数及含义:

  • --standalone:方便移植到其他机器,不用再安装python
  • --show-memory --show-progress:展示整个安装的进度过程
  • --nofollow-imports:不编译代码中所有的import,比如keras,numpy之类的。
  • --plugin-enable=qt-plugins:我这里用到pyqt5来做界面的,这里nuitka有其对应的插件。
  • --follow-import-to=utils,src:需要编译成C++代码的指定的2个包含源码的文件夹,这里用,来进行分隔。
  • --output-dir=out:指定输出的结果路径为out。
  • --windows-icon-from-ico=./logo.ico:指定生成的exe的图标为logo.ico这个图标,这里推荐一个将图片转成ico格式文件的网站(比特虫)。
  • --windows-disable-console:运行exe取消弹框。这里没有放上去是因为我们还需要调试,可能哪里还有问题之类的。

依赖包不会被nuitka处理,还需要复制依赖包(Lib\site-packages\下)到发布目录demo.dist下(与exe文件同一目录)。

标签:文件,EXE,title,Python,基础知识,--,install,pip,import
From: https://blog.51cto.com/cerana/11883178

相关文章

  • Python如何进行ADF(Augmented Dickey-Fuller)检验
    microPythonPython最小内核源码解析NI-motion运动控制c语言示例代码解析python编程示例系列python编程示例系列二python的Web神器Streamlit如何应聘高薪职位ADF(AugmentedDickey-Fuller)检验用于检查时间序列数据是否具有单位根,从而判断该序列是否平稳。主要用途平......
  • 【基于python tkinter的本地音乐播放器优化版】
    系列文章目录本地音乐播放器初版本地小说阅读器初版本地小说阅读器优化版文章目录系列文章目录前言一、功能介绍二、使用注意项三、界面展示1)菜单分类:2)关键字搜索3)拓展项4)临时列表四、附件前言前面写了一文,学习开发本地音乐播放器,小试牛刀,界面小气、粗糙且羞涩......
  • 【大数据】Java与Python的无缝对接:探讨Java调用Python的方法与原理
    文章目录一、引言二、Java调用Python的原理1.JNI(JavaNativeInterface)2.Jython3.进程间通信三、Java调用Python的实现方法及示例1.使用JNI调用Python2.使用Jython调用Python3.使用进程间通信调用Python4.性能和安全性考虑5.实际应用场景6.最佳实践四、总结一、......
  • python如何输出对称数
    1.什么是回文数/对称数回文数(PalindromeNumber)是指一个正整数,它从左向右读和从右向左读是完全相同的。换句话说,这个数关于其中心点是对称的。例如,数字12321是一个回文数,因为它从左读(12321)和从右读(12321)都是相同的。回文数可以是任何进制的数,但通常我们在讨论回文数时,指的......
  • 如何开发针对不平衡分类的成本敏感神经网络 python
    如何开发针对不平衡分类的成本敏感神经网络深度学习神经网络是一类灵活的机器学习算法,可以在各种问题上表现良好。神经网络使用误差反向传播算法进行训练,该算法涉及计算模型在训练数据集上产生的误差,并根据这些误差的比例更新模型权重。这种训练方法的局限性在于,每个类别......
  • 算法题技巧之“枚举右维护左“--套路详细讲解带例题和易懂代码(Python,C++)
    本文参考:灵茶山艾府-力扣(LeetCode)        分享丨【题单】常用数据结构(前缀和/差分/栈/队列/堆/字典树/并查集/树状数组/线段树)-力扣(LeetCode)    本文主要讲解关于”枚举右维护左“这个刷算法题的技巧,包括简单的原理讲解和两个简单的例题(之后我也会总......
  • python 基础习题7--for循环练习
    1.编写一个程序,判断输入的一个数字是否为偶数。示例输入:3返回:yes示例输入:4返回:no2.编写一个程序,找出列表中的大于50的数,并输出该数及其在列表中的索引位置。该列表可以自己写,例如:[23,78,1,56,35,60,90]输出:7815636059063.编写一个程序,统计一个字符串中字母"a"出现的次数......
  • 马铃薯叶片病害识别系统+Python+图像识别+人工智能+深度学习+卷积神经算法+计算机课设
    一、介绍马铃薯叶片病害识别系统。本项目使用Python作为主要开发语言,基于TensorFlow等深度学习框架搭建ResNet50卷积神经算法网络模型,通过对收集到的3种常见的马铃薯叶片病害数据集('早疫病','健康','晚疫病')进行训练得到一个识别精度较高的模型,然后将模型以H5格式文件形式保存......
  • Python股票接口实现查询账户,提交订单,自动交易(1)
    部分券商已经支持股票的API交易接入,大部分讲量化交易的文章都是讲用各种Python库取股票数据,和交易策略的回测,很少有讲到账户的查询和订单的提交与查询。基础介绍:其实取数据有各种方法,也都没什么门槛,有很多免费好用的第三方Python库,即时性和准确性不像券商官方的稳定可靠,实......
  • python基础三之基本数据类型
    1.数字类型及操作1.1整数类型  可正可负,没有取值范围限制pow(x,y) 计算x的y次方,想算多大算多大4种进制表示形式十进制:如:1019,8,-8二进制:由0b或0B开头,只由0,1组成,如:0b0110,-0B101010101八进制:由0O或0o开头:0O123,-0O445十六进制:又0X或0x开头:0X89,-0x9a1.2......