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)

同时也是解决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

时间: 2024-10-07 09:01:40

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

Python打包成exe

有个好网站http://www.lfd.uci.edu/~gohlke/pythonlibs/ , 这个网站可以下载许多非官方的python库的安装包. 1.首先去这个网站下载cx_freeze安装包后安装. 2.在C:\PythonXX\Scripts\ 下可以看到cxfreeze-quickstart.bat, XX为版本号 3.运行cxfreeze-quickstart.bat, 根据向导生成setup.py setup.py类似如下: importsys fromcx_Freeze im

python打包成.exe工具py2exe0-----No such file or directory错误

转自:http://justcoding.iteye.com/blog/900993 一.简介 py2exe是一个将python脚本转换成windows上的可独立执行的可执行程序(*.exe)的工具,这样,你就可以不用装python而在windows系统上运行这个可执行程序. py2exe已经被用于创建wxPython,Tkinter,Pmw,PyGTK,pygame,win32com client和server,和其它的独立程序.py2exe是发布在开源许可证下的. 二.安装py2exe 从h

win10环境下利用pyinstaller把python代码(.py)打包成可执行文件(.exe)

前言 最近写了一个小小的检测程序,python写起来只需要短短一百行,可是打包起来就没有C那么容易了.下面记录一下我艰难的"打包"过程. 方法一:py2exe py2exe是一种经典的方法,为什么说他经典呢?因为这玩意取了个这么好听的名字,但是只支持到python3.4,你这让我们这种紧跟时代潮流的弄潮儿怎么打包? 好吧,放弃. 方法二:pyinstaller 这是一个看起来比较靠谱的方法,只需要用pip安装,然后在命令窗里面一通操作就可以了.在这里,我参考了另一位老哥的博客(http

Python打包成exe工具

Python是一个应用很广泛的编程语言,当然少不了GUI 在Windows下可以有很多GUI库选择去写图形程序,但写好之后想在其他电脑上运行,必须要有python解释器环境. 解决这个问题就要用打包工具了,把python源码打包成exe之后就可以拷贝到其他电脑上运行了. 目前了解的有下面几种,常用的pyinstaller和cx_freeze: 1.py2exe 官方主页:   http://www.py2exe.org/ 2.pyinstaller 官方主页:   http://www.pyin

python (2):python打包成可运行文件app

本文的原文连接是: http://blog.csdn.net/freewebsys/article/details/46683645 转载请一定注明出处! 1,mac程序打包成app 有两个方案一个 pyinstaller 已经測试过了.没有打包成功. py2app能够成功打包. 2,安装py2app 首先安装一个gui框架 wxpython 參考: http://wiki.wxpython.org/ http://wiki.wxpython.org/Getting%20Started py2a

pycharm将py文件打包成可执行文件exe

1.安装pyinstaller 2.打开终端,输入命令pyinstaller -F -w gui.py -F:将所有库文件打包成一个exe -w:隐藏黑色控制台窗口 3.完成后在当前路径的dist文件夹下为生成的exe文件,无需安装Python环境,直接可以在windows环境下双击运行了 原文地址:https://www.cnblogs.com/lhm-test/p/11106024.html

python打包成.exe文件

1. 在PyCharm下安装pyinstaller 2. 在Terminal下输入:"pyinstaller -F -w *.py" 就可以制作出exe.生成的文件放在同目录dist下.     # 这里的*.py换成实际的py文件 -F(注意大写)是所有库文件打包成一个exe,-w是不出黑色控制台窗口. 不加-F参数生成一堆文件,但运行快.压缩后比单个exe文件还小一点点. 加-F参数生成一个exe文件,运行起来慢. 参考文档:https://blog.csdn.net/kingha

Windows用Pyinstaller把Python3程序打包成可执行文件exe

pip pip 是一个安装Python包的工具, 一般是在Python安装目录下的Scripts文件夹里.如果电脑上有pip,打开CMD窗口,进入pip所在目录,或者把这个目录添加到环境变量,输入 pip list 就可以看到已经安装的Python包 如果电脑上没有,可以到网上下载一个,链接https://pypi.python.org/pypi/pip 下载完成之后,解压到一个文件夹,用CMD控制台进入解压目录,输入: python setup.py install 等待完成安装即可 Pyin

python打包成exe(py2exe)

对比了几个打包工具,发现py2exe更好用一点,一个命令就可以. 1.获取 http://prdownloads.sourceforge.net/py2exe 下载python版本对应的.直接下载然后安装可以 2.python代码 *新建个python项目,里面新建两个文件py2exe.py,main.py 好像下面这样 *py2exe.py只要写我们要执行的程序,这里打印helloworld,并等待输入 #coding:utf-8 print 'helloworld' content=raw_