iospython打包
在实现iOS项目的自动打包工程中,我们需要配置好工程的证书文件信息,为了能够自动的根据bundle id来设置不同的profile文件,我们可以通过脚本文件来修改工程的projext.pbxproj文件帮助我们进行自动设置。
1. Project.pbxproj
Xcode项目中的xxx.xcodeproj其实是一个文件夹,右键单击xxx.xcodeproj,显示包内容:
Project.pbxproj的解析
关于这个配置文件的结构,请参考 project.pbxproj,最熟悉的”陌生人 (http://www.olinone.com/?p=215),解析该文件可以使用现有的解析工具mod-pbxproj,该工具是一个python的脚本。其github地址为: https://github.com/kronenthaler/mod-pbxproj 。
为了修改不同taget的profile,我们需要知道这些配置在文件中的具体位置,不难发现:
我们的目标是为不同的bundle id设置不同的profile,所以只需要找到不同target的XCBuildConfiguration,修改其中PROVISIONING_PROFILE的值即可。通过分析project.pbxproj文件结构,你会发现其找到这些target的buildSettings的路径如下:
rootObject=> PBXNativeTarget=> XCConfigurationList=> XCBuildConfiguration。
XCBuildConfiguration会有Debug和Release两个版本,这里我们以修改Release版本的为例进行说明。
2. Python脚本修改profile
需要在工程目录下配置如下脚本文件,通过从json文件中读取配置信息,然后根据不同的bundle id来设置不同的profile文件和其他字段信息。其中xcode_configurator_profile.py为修改profile的脚本文件,profile.json为配置的证书信息。demo如下图所示:
首先在profile.json文件中配置好bundle id和对应的profile文件,如下如所示:
然后在工程目录下执行xcode_configurator_profile.py:
检查profile修改结果:
如果设置了以后有任何问题, 你可以在对应的xxx.xcodeproject下找到对应的备份。
‘贰’ 如何将python文件打包成exe文件
1.需要安装 py2exe
2.示例代码:
#exetest.py#创建一个gui界面,只用一个标签和按钮,无功能from Tkinter import *win = Tk()
label = Label(win,text = 'hello')
btn = Button(win,text = 'click')
label.pack()
btn.pack()
win.mainloop()
3.配置代码:
#exeset.pyfrom distutils.core import setupimport py2exe
setup(console=["exetest.py"]) #运行的时候会有CMD窗口#或者setup(windows=["exetest.py"]) 运行的时候只有GUI
4.执行转换
首先定位到文件目录,然后运行CMD
python exeset.py py2exe
执行完毕之后会在该目录中生成一个文件夹dist,里面是生成的exe程序和相关依赖
5.使用pyinstaller
感觉pyinstaller比py2exe更好用,下载pyinstaller后解压就好,然后把一个demo.py复制到目录下,定位到位置后输入命令:
python pyinstaller.py --onefile --windowed --icon=path\x.ico demo.py
其中 --onefile 表示只生成一个.exe文件,相关依赖都打包了, --windowed 表示生成的是GUI,否则是带命令窗口的, --icon 是设置.exe的图标。这些都是可选项。
‘叁’ python自动打包ipa
使用如下:
cd到项目闹亩派乱目录
把脚本放液羡森入项目目录下
在终端运行(需要安装python环境)
‘肆’ windows系统的python打包程序,在ios中能运行吗
无fa可说
关注
python开发的程序在ios上应用_Python开发iOS程序 原创
2020-12-29 09:58:52
无fa可说
码龄4年
关注
对,你没有看错,就是使用Python开发iOS程序!
我们见过使用JS、Lua、Ruby开发iOS程序的,但是基本没有见过使用Python开发iOS程序(软件)的,这是为什么?关于这个问题,我后面会回答。
那么,怎么用Python开发iOS程序呢?其实我们最主要解决的就是下面几件事情:
在iOS App中安装Python解释器。
搭建Python和objc通信的桥梁。
如何配置工程并开发。
如果不使用UIKit这些,那么就要使用OpenGL ES这些了,这种方式,主要是用于开发游戏的,我们这里不涉及这些。
当然,以下所有内容都是在一台已经安装了Xcode的Mac上进行的。
在iOS App中安装Python解释器
Python-iOS-support
pybee开源了一个可以嵌入到iOS工程中的Python编译脚本,具体位置在这:
默认是使用Python 3.4.2,编译x86_64、i386、ARMv7、ARMv7s、ARM64共5个版本,然后打成一个臃肿包,可选framework或者.a。
如果真的要用于生产环境的话,只要把Makefile中的
TARGETS-iOS=iphonesimulator.x86_64iphonesimulator.i386iphoneos.armv7iphoneos.armv7siphoneos.arm64
修改为:
TARGETS-iOS=iphoneos.armv7iphoneos.arm64
我们只需要支持ARMv7和ARM64即可,ARMv7s可以兼容ARMv7,所以可以让包小一些。
‘伍’ 【python】打包成MAC APP
写了一个python小程序,想打包成可执行的APP,看网上写的教程很简单,大概就是下面这个样子。
1.生成setup.py文件
生成的默认setup.py内容如下:
2.打包
执行后会生成一个build和dist文件夹,dist下的main.app就是生成的可执行程序,双击即可运行。
但实际上,稍稍复杂一点的工程庆毁按照默认的setup.py打包,执行的时候都是会出错的。
原本的设想是会把工程包按原本的目录结构全部打包,但实际上需要用到的图片,音源,文本等等,在执行的时候都会报错找不到,因为都是要手动配置到setup.py里才能被打包。
如果不知道自己的APP为什么会报错,可用以下命令执行APP,就可以看到报错信息:
所以需要修改setup.py如下:
具体的参数解释: 官方文档
icns的生成参考: 【MAC】生成MAC APP图标icns
================================
追加一个打包后运行时遇到的一个让我解决了很久的问题。
报错信息如下:
查了很多信息,应该是动态链接库的问题,当你的依赖库里又去引用另一个库的时候,会出现这种找不到的情况。但是网上的解决办好判法我都没有试成功,尤其我要保证我的APP去了任何一台机器都可以直接运行。所以最后尝试了最傻的办法。就是直接把这个找不到的库誉袜备打包进我的APP,虽然这个libffi.8.dylib应该是一个shared lib.
所以修改setup.py文件里追加如下设置:
重新打包后,libffi.8.dylib就会自动出现在Frameworks下面,本机双机运行正常,直接传到其它机器运行也正常了。
‘陆’ 如何将一整个python工程打包
1、下载并芦轿安装py2exe,可下载最新版本。
2、编写安装脚本,比较简单,不过多解释,如下:
Screenshot_setup.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from distutils.core import setup
import py2exe
includes = ["encodings", "encodings.*"]
data_files = ['CameraDll.dll']
options = {"py2exe":
{ "compressed": 1,
"optimize": 2,
"bundle_files": 1,
"includes": includes
}
}
setup(
version = "1.0",
description = "Screenshot Tool",
name = "Screenshot Tool",
options = options,
zipfile=None,
data_files = data_files,
console=[{"script": "陪销肆Screenshot.py", "icon_resources": [(1, "Screenshot.ico")] }]
)
各参数含义见第5小节或执行python命令行下执行help(py2exe)查看。
3、打包程序:
a、将要找包的程序、文件和打包脚本放在同一目录下,如下:
E:\tmp\pyexe_tmp>tree /F
文件夹 PATH 列表
卷序列号码为 0007F240 101F:F68D
E:.
CameraDll.dll
screenshot.ico
Screenshot.py
screenshot_setup.py
没有子文件夹
E:\tmp\pyexe_tmp>
b、执行打包脚本:
E:\tmp\pyexe_tmp>python screenshot_setup.py py2exe
python screenshot_setup.py py2exe
running py2exe
creating E:\tmp\pyexe_tmp\build
creating E:\tmp\pyexe_tmp\build\bdist.win32
creating E:\tmp\pyexe_tmp\build\bdist.win32\winexe
creating E:\tmp\pyexe_tmp\build\bdist.win32\winexe\collect-2.6
creating E:\tmp\pyexe_tmp\build\bdist.win32\winexe\bundle-2.6
creating E:\斗渗tmp\pyexe_tmp\build\bdist.win32\winexe\temp
creating E:\tmp\pyexe_tmp\dist
*** searching for required moles ***
*** parsing results ***
*** finding dlls needed ***
*** create binaries ***
*** byte compile python files ***
writing byte-compilation script 'e:\tmp\tmp1ecbcw.py'
‘柒’ python怎么打包整个项目
distutils - Python自带的基本安装工具, 适用于非常简单的应用场景使用, 不支持依赖包的安装
通过distutils来打包,生成安装包,安装python包等工作,需要编写名为setup.py python脚本文件。
setuptools - 针对 distutils 做了大量扩展, 尤其是加入了包依赖机制。不支持python3,安装完setuptools后会有easy_install
distribute - 类似于setuptools,支持python3,安装完distribute后会有easy_install。
easy_install - setuptools 和 distribute 自带的安装脚本, 也就是一旦setuptools或distribute安装完毕, easy_install 也便可用了。
pip - 目标是取代easy_install。easy_install 有很多不足: 安装事务是非原子操作, 只支持 svn, 没有提供卸载命令, 安装一系列包时需要写
脚本; pip 解决了以上问题, 已俨然成为新的事实标准, virtualenv 与它已经成为一对好搭档;
distutils2 - setuptools 和 distribute 的诞生是因为 distutils 的不济, 进而导致目前分化的状况。它将成为 Python 3.3 的标准库
packaging , 并在其它版本中以distutils2 的身份出现; 换句话说, 它和 pip 将联手结束目前混乱的状况。
virtualenv - 用来创建隔离的python环境,处理python环境的多版本和模块依赖。
常识
sudo apt-get install 安装的package存放在 /usr/lib/python2.7/dist-packages目录中
pip 或者 easy_install安装的package存放在/usr/local/lib/python2.7/dist-packages目录中
手动从源代码安装的package存放在site-packages目录中。
更多学习内容,请点击Python学习网!
‘捌’ 将python打包成exe
return 应该放在一个函数里面的,
将python打包成exe的程序有很多,比如py2exe、PyInstaller等等,但是到目前为止,它们对python3.1支持的都不好,所以这里我要介绍一下cx_freeze 4.2.2,它还能支持跨平台,可以在windows和linux运行。
cx_freeze的下载网址为 http://sourceforge.net/projects/cx-freeze/files/ ,要根据已安装的python版本进行选择。比如我使用的是python3.1,所以就要下载cx_Freeze-4.2.2.win32-py3.1.msi这个文件。运行这个安装包后,相关程序就会被拷贝到python的目录下。主要在两个地方,一个是C:/Python31/Scripts,另一个是C:/Python31/Lib/site-packages/cx_Freeze
在以前版本的cx_Freeze中,是通过FreezePython.py这个脚本将py转换为exe,而在4.2.2这个版本中,FreezePython.py已经不见了,主要的工作交给了C:/Python31/Scripts下的cxfreeze.bat来完成。
使用cx_Freeze完成python打包exe主要有两种方法:
第一种,直接运行cxfreeze.bat通过:
先进入cmd命令行,进入C:/Python31/Scripts目录,然后运行cxfreeze.bat -h 就可以看到它的使用说明了。我们可以用cx_freeze自己的sample做个试验。
进入到c:/python31/scripts/下,运行
cxfreeze C:/Python31/Lib/site-packages/cx_Freeze/samples/PyQt4/PyQt4app.py --install-dir=d:/123
pytqt4app.py就会被打包成exe,并且它所用到的库文件,也被一并考到了d:/123目录下。