python打包成可执行文件
1
最开始我直接把在Windows上打包的run.exe文件上传到Linux以为可以直接用了。但是./run后报错。百度后知道,Windows上的程序不能在Linux上运行
Linux下文件是否可执行可后缀没有关系,只和权限有关系,靠的是文件本身的权限。想要执行就 chmod 755 filename 改变文件权限
windows和linux的二进制文件不能兼容,楼主检查下吧,不能在linux下运行windows的程序.一定要在linux下运行,需要安装wine
Linux默认支持ELF格式二进制文件,Windows的PE格式运行不了的。
2 python用pyinstaller打包后,运行程序报错"pkg_resources.DistributionNotFound"的解决办法

最后一句话是重点
pkg_resources.DistributionNotFound:the "APScheduler" distribution was not found....
这里明明已经打包好了exe文件,也没有报错。但是运行exe时候,却弹出这个界面一闪而过。
之后再查阅了pyinstaller的官方文档后,找到了解决办法。
在目标文件目录下创建一个hook-ctypes.macholib.py文件:
里面的内容如下:
# -*- coding: utf-8 -*-
from PyInstaller.utils.hooks import copy_metadata
datas = copy_metadata('apscheduler')
然后打包的时候,多加一句--additional-hooks-dir=,如下所示:
pyinstaller -F yourfile.py --additional-hooks-dir=
这样修改以后,打包出来的exe文件就能够正常使用了。
3 APScheduler: LookupError: No trigger by the name “interval” was found
环境
python: 2.6.6
PyInstaller: 2.1
APScheduler: 开始是3.0.1,后来是3.0.5
问题一
问题描述
以前在别的机器上开发的python程序(python2.7),在新的机器上运行时报错
LookupError: No trigger by the name "interval" was found
程序代码
import os, time
from datetime import datetime
from apscheduler.schedulers.background import BackgroundScheduler def myjob():
print('myjob: %s' % datetime.now())
time.sleep(5) if __name__ == '__main__':
scheduler = BackgroundScheduler()
scheduler.add_job(myjob, 'interval', seconds=1)
scheduler.start() try:
while True:
time.sleep(5)
except (KeyboardInterrupt, SystemExit):
scheduler.shutdown()
原因
是由于低版本的setuptools导致
解决办法
sudo pip install --upgrade setuptools
sudo pip install --ignore-installed apscheduler
然后再次运行上面的python代码,问题解决。
问题二
问题描述
第一个问题解决后,在运行使用pyinstaller打包生成的可执行文件的时候报错
Traceback (most recent call last):
File "<string>", line 11, in <module>
File ".../out00-PYZ.pyz/apscheduler.schedulers.base", line 330, in add_job
File ".../out00-PYZ.pyz/apscheduler.schedulers.base", line 782, in _create_trigger
File ".../out00-PYZ.pyz/apscheduler.schedulers.base", line 766, in _create_plugin_instance
LookupError: No trigger by the name "interval" was found
原因
感觉好像是由于pyinstaller打包的时候使用了错误版本的APScheduler。(不确定)???
解决办法
不要在add_job方法中使用“’interval’, seconds=1”做trigger,而是先创建一个IntervalTrigger对象,然后add_job的时候使用这个对象,即:
修改原来代码中
scheduler.add_job(myjob, 'interval', seconds=1)
为
trigger = IntervalTrigger(seconds=1)
scheduler.add_job(myjob, trigger)
完整代码如下
def myjob():
print('myjob: %s' % datetime.now())
time.sleep(5) if __name__ == '__main__':
scheduler = BackgroundScheduler()
trigger = IntervalTrigger(seconds=1)
scheduler.add_job(myjob, trigger)
scheduler.start() try:
while True:
time.sleep(5)
except (KeyboardInterrupt, SystemExit):
scheduler.shutdown()
然后用PyInstaller重新打包,此时再运行可执行文件的时候就不会报错了。
重点:因为用到了IntervalTrigger,所以需要从包里导入,然后我找了这么一个帖子http://blog.csdn.net/mx472756841/article/details/51751616
用了这里面的如下代码
# 示例代码
from apscheduler.triggers.interval import IngervalTrigger
# 使用字符串方式
scheduler.add_job(interval_tick,'interval',seconds=4,minutes=2,
start_date=datetime.now()+dt.timedelta(seconds=120),
end_date=datetime.now()+dt.timedelta(seconds=360))
# 使用IntervalTrigger指定时间运行
trigger = IntervalTrigger(seconds=60,
start_date=datetime.now()+dt.timedelta(seconds=60),
end_date=datetime.now() + dt.timedelta(seconds=120))
scheduler.add_job(date_tick, trigger)
但是他这里import是错误的。害我找了半天,后来用在在python自带的用户图形界面中import apschedluer 后用dir() 一步一步找到正确的名字,然后才运行通过的。
4 打包成可执行文件后就需要连接本地的数据库(XAMPP上的MySQL)
https://jingyan.baidu.com/article/d169e186467a44436611d8b1.html
可以进入shell后操作(如果host为%号,那么就是所有主机都可以登录,包括远程主机.)
musql -uroot
select host,password,user,from user;
update user set host = "%" where host = "127.0.0.1"
相关文档(http://blog.csdn.net/xiaomengh/article/details/48706149)
5 greenlet.h:8:20: 致命错误: Python.h:没有那个文件或目录
解决方法是安装python-dev,这是Python的头文件和静态库包:
sudo apt-get install python-dev
但还是不行,TODO
TODO
python打包成可执行文件的更多相关文章
- 将Python打包成可执行文件exe的心路历程
导言: 我们有时候需要将做好的Python程序打包成为一个exe , 方便我们使用,查找了资料发现 pyinstaller .py2exe,最后还是选择的pyinstaller,用的时候踩过了挺多的坑 ...
- 将Python脚本打包成可执行文件
Python是一个脚本语言,被解释器解释执行.它的发布方式: .py文件:对于开源项目或者源码没那么重要的,直接提供源码,需要使用者自行安装Python并且安装依赖的各种库.(Python官方的各种安 ...
- Python打包成exe可执行文件
Python打包成exe可执行文件 安装pyinstaller pyinstaller打包机制 Pyinstaller打包exe 总结命令 可能会碰到的一些常见问题 我们开发的脚本一般都会用到一些第三 ...
- python打包生成可执行文件教程
python打包生成可执行文件教程 安装环境: 1.打开命令行窗口,输入命令:pip install pyinstaller ,等待下载结束.示例: 2.下载结束后,测试是否成功安装,输入命令:pyi ...
- Python打包成exe,文件太大问题解决办法
Python打包成exe,文件太大问题解决办法 原因 解决办法 具体步骤 情况一:初次打包 情况二:再次打包 原因 由于使用pyinstaller打包.py文件时,会把很多已安装的无关库同时打包进去, ...
- python打包成exe
目前有三种方法可以实现python打包成exe,分别为 py2exe Pyinstaller cx_Freeze 其中没有一个是完美的 1.py2exe的话不支持egg类型的python库 2.Pyi ...
- py库:把python打包成exe文件(pyinstaller)
http://blog.csdn.net/be_quiet_endeavor/article/details/73929077 用Pyinstaller把Python3.4程序打包成可执行文件exe ...
- 关于python打包成exe的一点经验之谈
我经常用python写些脚本什么的,有时候脚本写完以后,每次运行都得在IDE打开在运行,很麻烦,所以经常将python编译成exe.SO...有了一点经验,在这和大家分享一下. python ...
- Python打包成exe,pyc
D:\mypython\path\ C:\Python27\Scripts\pyinstaller.exe -w mypython.py # Python打包成exe D:\mypython\path ...
随机推荐
- 2019-2-27-win10-uwp-去掉-Flyout-边框
title author date CreateTime categories win10 uwp 去掉 Flyout 边框 lindexi 2019-02-27 17:48:46 +0800 201 ...
- Winform C#关于utf8编码问题
public string SendDataByPost(string param, string Url) { try { HttpWebRequest request = (HttpWebRequ ...
- Python10_代码规范和可读性
养成好的编程习惯和方法对提升代码可读性至关重要. 1.类.模块.包:不要用下划线,命名要简短 2.类:命名最好以大写开头 3.模块.包:用小写单词 4.变量.函数.方法:可以用下划线提高可读性,尽量都 ...
- python文件的读写追加等操作
# encoding:utf-8 # 文件读取操作 fp=open("E:\\file.txt","r",encoding="utf-8" ...
- web.config修改文件修改上传大小
老是要修改上传文件大小的限制,先记在这里. <httpRuntime maxRequestLength= "1048576 " //最大长度 executionTimeout ...
- C# event 事件
事件第二篇:https://www.cnblogs.com/FavoriteMango/p/11731485.html 曾经面试碰到一道设计题: 现有一个人,一群鸟,人有一把手枪,当人开枪时,所有的鸟 ...
- $ CometOJ-Contest\#11\ D$ $Kruscal$重构树
正解:$Kruscal$重构树 解题报告: 传送门$QwQ$ 发现一个图上搞就很麻烦,考虑变为生成树达到原有效果. 因为在询问的时候是要求走到的点编号尽量小,发现这个时候点的编号就成为限制了,于是不难 ...
- 前端-jQuery介绍
目录 jQuery介绍 jQuery的优势 jQuery内容: jQuery版本 jQuery对象 jQuery基础语法 查找标签 基本选择器 层级选择器: 基本筛选器: 属性选择器: 表单筛选器: ...
- .NET Core 3.1之深入源码理解HealthCheck(二)
写在前面 前文讨论了HealthCheck的理论部分,本文将讨论有关HealthCheck的应用内容. 可以监视内存.磁盘和其他物理服务器资源的使用情况来了解是否处于正常状态. 运行状况检查可以测试应 ...
- 小小知识点(三十六)EXCEL闪退解决办法
1. 首先打开控制面板,从系统和安全中选择管理工具打开Windows事件查看器 2. 点击展开Windows日志-->应用程序.然后在右侧列表中找到出现的错误(点击后,查看下面的信息就知道是不是 ...