python创建项目环境及项目打包

news2024/9/20 22:37:19

目录

  • 创建项目环境
    • conda创建环境常用命令
    • 创建项目虚拟环境
      • 创建虚拟环境
      • 激活虚拟环境
      • 安装第三方库
  • pyinstaller 打包
    • 常用参数组合
  • 嵌入式打包
    • 下载嵌入式版本的python
    • 配置环境
    • 无参调用
    • 可完善
  • nuitka打包

创建项目环境

conda创建环境常用命令

conda create -n py310 python=3.10.11
conda env list
activate
deactivate
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple XX
conda list

conda remove -n  需要删除的环境名 --all

# 复制conda虚拟环境
conda create -n new_name --clone base

# Spec List
# 如果需要在具有 相同操作系统 的计算机之间复制环境,则可以生成 spec list。
conda list --explicit > spec-list.txt
# 重现环境
conda create  --name python-course --file spec-list.txt

# Environment.yml
# 使用 -export 选项生成一个 environment.yml 文件,以在 不同的平台和操作系统之间 复现项目环境
# spec list 文件和 environment.yml 文件之间的区别在于: environment.yml 文件不针对特定操作系统,并且使用YAML格式。
# environment.yml 仅列出了软件包名称,由 conda 基于软件包的名称构建环境。 另一个区别是 -export 还包括使用pip安装的软件包,而 spec list 则没有。
# 导出 environment.yml 文件
conda env export > environment.yml
# 重现环境
conda env create -f environment.yml

# Conda Pack
# 用于无网络环境
# conda-pack 指定平台和操作系统,目标计算机必须具有与源计算机相同的平台和操作系统
# 需安装 conda-pack,并确保您位于 root 或 base 环境中,以便 conda-pack 在子环境中可用。Conda-pack 可通过 conda-forge 或者 PyPI 安装。
# conda-forge
conda install -c conda-forge conda-pack
# PyPI
pip install conda-pack
# ###打包一个环境###
# Pack environment my_env into my_env.tar.gz
conda pack -n my_env
# Pack environment my_env into out_name.tar.gz
conda pack -n my_env -o out_name.tar.gz
# Pack environment located at an explicit path into my_env.tar.gz
conda pack -p /explicit/path/to/my_env
# ###重现环境###
# Unpack environment into directory `my_env`
mkdir -p my_env
tar -xzf my_env.tar.gz -C my_env
# Use Python without activating or fixing the prefixes. Most Python
# libraries will work fine, but things that require prefix cleanups
# will fail.
./my_env/bin/python
# Activate the environment. This adds `my_env/bin` to your path
source my_env/bin/activate

创建项目虚拟环境

从Python 3.3版本起,Python标准库自带了venv模块用于创建虚拟环境。

创建虚拟环境

python -m venv env

这将在当前目录下生成一个名为my_venv的文件夹,其中包含了独立的Python解释器和pip包管理器。
在这里插入图片描述
18.2M

激活虚拟环境

  • Windows系统:
.\env\Scripts\activate
  • Linux或macOS系统:
$ source env/bin/activate

激活后,终端前缀将显示虚拟环境名,表示当前正在使用该环境的Python解释器。

安装第三方库

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple numpy # 83.6M - 18.2M
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple matplotlib # 
pip list  # 130M-83.6M

pyinstaller 打包

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyinstaller

打包成文件夹的形式

pyinstaller your_program.py
pyinstaller -F your_program.py

常用参数组合

# 基础命令
pyinstaller myscript.py
# 初次打包建议添加-c参数,可以同过cmd黑窗口查看打包问题
pyinstaller -c myscript.py
# 生成一个单独的exe文件,适合无文件操作的程序
pyinstaller -F myscript.py
# 生成一个单独的exe文件,适用windows系统,适合无文件操作的程序,下面2个是一样的效果。
pyinstaller -F -w myscript.py
pyinstaller -F --windowed myscript.py
# 生成一个文件夹,文件夹中包含exe执行程序,适合有一定文件夹或文件的操作程序。
pyinstaller -D --windowed myscript.py

# 针对文件生成的最终位置,使用--distpath=参数指定
pyinstaller -D --windowed --distpath='C:\Users\xxx\xxx\xx' myscript.py
# 针对文件生成的exe文件名字,使用--name=TYQT参数指定
pyinstaller -D --windowed --distpath='C:\Users\xxx\xxx\xx' --name='TYQT' myscript.py
# 针对文件生成的exe的图标,使用--icon=参数指定,zaiwindows系统下,需要使用ico图标,如果是png直接百度在线转
pyinstaller -D --windowed --distpath='C:\Users\xxx\xxx\xx' --name='TYQT' --icon='icon.ico' myscript.py
# 针对exe程序以来的文件夹和文件,使用--add-data(比如.txt)和--add-binary(程序可能依赖其他.exe命令)参数指定
# --add-data和--add-binary参数实际是2个文件,在windows是通过;分号区分复制前和后的,在linux的符号是:。
# 下边的语句就是将项目的data/excel/订单记录表.xlsx文件复制到C:\Users\lenovo\PycharmProjects\程序打包文件\myscript\data\excel文件夹下,myscript\data\excel会自动创建。
pyinstaller -D --windowed --distpath='C:\Users\xxx\xxx\xx' --name='TYQT' --icon='icon.ico' --add-data=data/excel/订单记录表.xlsx;./data/excel myscript.py

嵌入式打包

下载嵌入式版本的python

链接: https://www.python.org/downloads/windows/
在这里插入图片描述

配置环境

解压该压缩包,进入该文件夹里,
在这里插入图片描述
更改python310._pth文件里面的内容:
在这里插入图片描述
在这里插入图片描述

只有导入了site,才能正常运行程序。也要把上级文件夹(…)加进去,因为最终我们的Python代码会放在这个文件夹的上级。

下载get-pip.py文件
链接: https://bootstrap.pypa.io/pip/
在这里插入图片描述
将get-pip.py放到python解释器同级目录
进入该文件夹,打开cmd

.\python.exe get-pip.py

在这里插入图片描述
得到生成的两个文件夹Lib、Scripts:
在这里插入图片描述
进入Scripts文件夹,打开cmd,用这个文件夹的pip进行安装你自己的程序所需要的第三方库
在这里插入图片描述

无参调用

建立script文件, 在文件夹内编写main.py

#!/usr/bin/python
# -*- coding: utf-8 -*-

import os
import sys

BASE_PATH = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
print(BASE_PATH)
sys.path.append(BASE_PATH)

print("hello, 123456!")
print("按任意键继续...")
input()  # 这里input()函数会暂停并等待用户输入

通过bat文件调用,run.bat

.\python-3.10.11-embed-amd64\python.exe .\script\main.py
pause

通过exe文件调用,需先编写run.c

#include <stdlib.h>
int main()
{
    system(".\\python-3.10.11-embed-amd64\\python.exe .\\script\\main.py");
}

编写run.c, 得到run.exe
在这里插入图片描述
整个文件夹的目录
在这里插入图片描述
去除第三方库,整个项目只有19M,压缩后只有8M

可完善

安装第三库失败时,可在python环境版本相同时,直接copy
将py文件转为pyd加密后,再调用
考虑带参数的调用
考虑带界面的调用

nuitka打包

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple nuitka

nuitka --follow-import-to=mdl main.py
nuitka --standalone --output-dir=out2 main.py
nuitka --onefile --output-dir=out3 main.py        不建议使用

python -m nuitka --standalone --remove-output {your_python_program_name}.py
nuitka --mingw64 --show-progress --standalone --disable-console --enable-plugin=matplotlib --plugin-enable=numpy --onefile --remove-output camera.py

nuitka打包后的exe体积小了,在本机运行无问题;但迁移到其他计算机会遇到各种问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2051965.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《学会 SpringBoot · 依赖管理机制》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…

IntelliJ IDEA 集成 ShardingSphere-JDBC 访问分库分表

背景 众所周知&#xff0c;IntelliJ IDEA 是 Java 领域常用的开发工具之一&#xff0c;IDEA Ultimate&#xff08;旗舰版&#xff09;或其他例如 DataGrip 等 Intellij 平台的工具都集成了对数据库的访问能力。 但是&#xff0c;对于做了分库分表的项目&#xff0c;直接使用 …

微信支付代理商-自助提交资料源码之结算信息页面—微信支付商机版

一、支付代理上自助提交资料 一般在都在小程序完成提交 在网页中异常提示alert 但是很多小程序禁用了这个函数 并且不好看 那么久自定义一个组件每次直接调用 二、提示技术代码 function 未来之窗_VOS_通用提醒(msg){var 未来之窗内容message<cyberdiv style"font…

选择排序(直接选择排序与堆排序的比较)

选择排序 选择排序时间复杂度 1. 直接选择排序思考⾮常好理解&#xff0c;但是效率不是很好。实际中很少使用&#xff0c;思路是先进行遍历找到元最小的元素&#xff0c;然后与第一个进行交换 2. 时间复杂度&#xff1a;O&#xff08;&#xff09; 3. 空间复杂度&#…

gmapping算法核心部分

processScan函数 参考&#xff1a;https://blog.csdn.net/CV_Autobot/article/details/131058981 drawFromMotion:根据运动模型更新粒子位姿 scanMatch:进行扫描匹配 resample:重采样 逐步分解并详细解释代码 1. 获取当前扫描的相对位姿 OrientedPoint relPose reading.…

舜宇光学科技社招校招入职测评:商业推理测验真题汇总、答题要求、高分技巧

舜宇光学科技&#xff08;集团&#xff09;有限公司&#xff0c;成立于1984年&#xff0c;是全球领先的综合光学零件及产品制造商。2007年在香港联交所主板上市&#xff0c;股票代码2382.HK。公司专注于光学产品的设计、研发、生产及销售&#xff0c;产品广泛应用于手机、汽车、…

BEM架构

视频 总结&#xff1a; BEM架构&#xff1a;一个命名类的规范而已&#xff0c;说白了就是如何给类起名字使用sass的目的&#xff1a;在<style>中模块化的使用类名&#xff0c;同时减少代码数量 1、 BEM架构 &#xff08;通义灵码查询结果&#xff09; BEM (Block Ele…

【hot100篇-python刷题记录】【和为 K 的子数组】

R5-子串篇 目录 思路&#xff1a; 优化&#xff1a; tip: 代码&#xff1a; 结果&#xff1a; ps: 思路&#xff1a; 滑动&#xff0c;应该可以使用滑动窗口来解题。 貌似前缀和也可以&#xff0c;left&#xff0c;right两个指针&#xff0c;right的前缀和-left的前缀…

【学习笔记】printf中%m的含义

【学习笔记】printf中%m的含义 在有些代码中会看到如下的写法&#xff1a; printf("%m\n");printf中使用了%m来打印输出&#xff0c;那么%m又是什么意思呢&#xff1f; 其实%m 并不是在所有的 printf 实现中都通用或标准化的选项&#xff0c;而是在某些特定的编程语…

vue的markdown编辑器插件比对

vue的markdown编辑器插件比对 文章说明md-editor-v3的使用及效果展示vditor的使用及效果展示 文章说明 文章比对 md-editor-v3、vditor 这两个插件的使用及效果体验 md-editor-v3的使用及效果展示 安装 npm install md-editor-v3使用 <script setup> import {reactive} f…

图神经网络(Graph Neural Networks)是什么?

图神经网络&#xff08;Graph Neural Networks&#xff09;是什么&#xff1f; 引言 在数据科学和机器学习的广阔领域中&#xff0c;图结构数据以其独特的复杂性和丰富性成为了一个重要的研究方向。从社交网络中的用户关系&#xff0c;到生物信息学中的蛋白质交互网络&#x…

跨进程通信使用 Zenoh中间件 进行高效数据传输的测试和分析

文章目录 1. 引言2. Zenoh C 使用指南2.1 安装 Zenoh C 库2.2 编写基本的 Zenoh C 程序订阅示例发布示例 2.3 编译和运行程序 3. Zenoh 与 ROS2 集成3.1 安装 Zenoh3.2 安装 ROS2 的 Zenoh RMW 实现3.3 设置 RMW 实现为 Zenoh3.4 验证配置 4. 编写基于 Zenoh 的 ROS2 应用程序4…

Linux系统编程 --- 多线程

线程&#xff1a;是进程内的一个执行分支&#xff0c;线程的执行粒度&#xff0c;要比进程要细。 一、线程的概念 1、Linux中线程该如何理解 地址空间就是进程的资源窗口。 在一个程序里的一个执行路线就叫做线程&#xff08;thread&#xff09;。更准确的定义是&#xff1…

浏览器遇到的问题

下载的时候遇到&#xff0c;需要授权&#xff0c;无法下下载 将隐私里面的全部关掉

虚幻5|AI巡逻宠物伴随及定点巡逻—初步篇

一.建立AI基本三件套 1.建立AI基本三件套 二.使用AI的基本设置 1.打开我们想要用的AI宠物的蓝图&#xff0c;选中自我Actor,右侧细节处找到AI&#xff0c;选中对应的AI控制器 三.打开AI控制器 写如下 四&#xff0c;AI行为树 1.新建一个任务&#xff0c;命名含巡逻二字即可…

BigInteger与BigDecimal

BigInteger BigInteger构造方法 public BigInteger(int num, Random rnd) 获取随机大整数&#xff0c;范围&#xff1a;[0 ~ 2的num次方-1] public BigInteger(String val) 获取指定的大整数 public BigInteger(String val, int radix) 获取指定进制的大整数 构造方法小结…

Power Query抓取多页数据导入到Excel

原文链接 举例网站&#xff1a;http://vip.stock.finance.sina.com.cn/q/go.php/vLHBData/kind/ggtj/index.phtml?last5&p1 操作步骤 &#xff08;版本为&#xff1a;Excel2010&#xff09;&#xff1a; Step-01&#xff1a;单击【Power Query】-【从Web】&#xff0c;…

Java之文件操作和IO

目录 File类 属性 构造方法 方法 文件内容的读写 InputStream OutputStream File类 属性 修饰符及类型属性说明static StringpathSeparator依赖于系统的路径分隔符&#xff0c;String类型的表示static charpathSeparator依赖于系统的路径分隔符&#xff0c;char类型的…

ps磨皮滤镜插件Imagenomic Portraiture 4.5 Build 4501中文版

PS磨皮神器更新为Portraiture 中文汉化版&#xff08;支持PS 2024&#xff09; 。Portraiture 4.5 Build 4501中文绿色破解版是一款非常强大的适用于Photoshop&#xff0c;Lightroom&#xff0c;Aperture的人物磨皮&#xff08;人物润色&#xff09;插件。Portraiture插件被经常…

基于eBPF的procstat软件追踪C++ STL容器扩容

在性能敏感的C程序中&#xff0c;标准模板库&#xff08;STL&#xff09;容器的扩容操作往往是导致性能抖动的原因之一。扩容操作可能会引发内存重新分配和数据迁移&#xff0c;从而导致性能不稳定。然而&#xff0c;由于C标准库的扩容函数通常被内联化&#xff0c;传统的方法难…