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)

同时也是解决Navicat 报错:1130-host ... is not allowed to connect to this MySql server,MySQL不允许从远程访问的方法 (http://www.cnblogs.com/shyy/archive/2012/03/30/2453034.html).

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)

greenlet.h:8:20: 致命错误: Python.h:没有那个文件或目录

解决方法是安装python-dev,这是Python的头文件和静态库包:

sudo apt-get install python-dev 

但还是不行,TODO

TODO

python打包成可执行文件的更多相关文章

  1. 将Python打包成可执行文件exe的心路历程

    导言: 我们有时候需要将做好的Python程序打包成为一个exe , 方便我们使用,查找了资料发现 pyinstaller .py2exe,最后还是选择的pyinstaller,用的时候踩过了挺多的坑 ...

  2. 将Python脚本打包成可执行文件

    Python是一个脚本语言,被解释器解释执行.它的发布方式: .py文件:对于开源项目或者源码没那么重要的,直接提供源码,需要使用者自行安装Python并且安装依赖的各种库.(Python官方的各种安 ...

  3. Python打包成exe可执行文件

    Python打包成exe可执行文件 安装pyinstaller pyinstaller打包机制 Pyinstaller打包exe 总结命令 可能会碰到的一些常见问题 我们开发的脚本一般都会用到一些第三 ...

  4. python打包生成可执行文件教程

    python打包生成可执行文件教程 安装环境: 1.打开命令行窗口,输入命令:pip install pyinstaller ,等待下载结束.示例: 2.下载结束后,测试是否成功安装,输入命令:pyi ...

  5. Python打包成exe,文件太大问题解决办法

    Python打包成exe,文件太大问题解决办法 原因 解决办法 具体步骤 情况一:初次打包 情况二:再次打包 原因 由于使用pyinstaller打包.py文件时,会把很多已安装的无关库同时打包进去, ...

  6. python打包成exe

    目前有三种方法可以实现python打包成exe,分别为 py2exe Pyinstaller cx_Freeze 其中没有一个是完美的 1.py2exe的话不支持egg类型的python库 2.Pyi ...

  7. py库:把python打包成exe文件(pyinstaller)

    http://blog.csdn.net/be_quiet_endeavor/article/details/73929077 用Pyinstaller把Python3.4程序打包成可执行文件exe ...

  8. 关于python打包成exe的一点经验之谈

    我经常用python写些脚本什么的,有时候脚本写完以后,每次运行都得在IDE打开在运行,很麻烦,所以经常将python编译成exe.SO...有了一点经验,在这和大家分享一下.      python ...

  9. Python打包成exe,pyc

    D:\mypython\path\ C:\Python27\Scripts\pyinstaller.exe -w mypython.py # Python打包成exe D:\mypython\path ...

随机推荐

  1. windows编译caffe2遇到的问题

    首先介绍下window编译caffe2整体流程: 说明:如果不需要python支持只需3.4即可,而且编译亦不会出现问题. 1. 安装python2.7,. 我使用的是anaconda python2 ...

  2. wpf 自定义 ToolTip 模板

    示例是在blend中画的,圆角带阴影和倒三角 <Style x:Key="toolTipStyle" TargetType="ToolTip"> & ...

  3. C++虚继承初识

    struct Employee { ... }; struct Manager : Employee { ... }; struct Worker : Employee { ... }; struct ...

  4. Vijos 1206 CoVH之再破难关 [BFS] [位运算]

    1.题意:一个由01组成的4*4的矩阵,可以实现相邻元素交换位置的操作,给出初试状态和目标状态,试求最少操作数的方案: 2.输入输出:输入给出初试矩阵和目标矩阵:要求输出最小操作的次数: 3.分析:输 ...

  5. js实现php函数urlencode

    原文链接:https://www.cnblogs.com/xiaochaohuashengmi/archive/2010/05/28/1746168.html 本文介绍了php函数urlencode的 ...

  6. salesforce零基础学习(九十五)lightning out

    随着salesforce对lightning的推进,越来越多的项目基于lightning开发,导致很多小伙伴可能都并不了解classic或者认为不需要用到classic直接就开始了lightning的 ...

  7. jquery中为动态增加的元素添加事件

    // html代码 <ul id="main"> </ul> // js代码 $(function(){ // 动态添加html代码 $("#ma ...

  8. 五子棋C++版

    当前只完成了单机人人对战  后续会完成联机和AI的实现 定义棋盘 typedef struct { int kind; }Map; //棋盘 0为无子 1为黑子 2为白子 Map maps[line_ ...

  9. 日志管理-log4j与slf4j的使用

    一.概述 1.log4j: Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台.文件.GUI组件,甚至是套接口服务器.NT的事件记录器.UNIX Sy ...

  10. 我终于懂得如何使用matplotlib进行画图

    一 前言 本篇文章带大家快速入门如何使用matplotlib画出精美数学的图片:看完本篇文章你将获得熟悉并简单使用matplotlib工具,会画基本得折现图,散点图,sin,cos图,一张画布画出多图 ...