python依赖打包
Ⅰ 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文件
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程序打包为exe
用pyinstaller,很容易就能实现,步骤如下:
下载pyinstaller包,(我可以安装包发给你),把pyinstaller解压到任意路径后
1.开始->运行->cmd->回车
2.把路径改为pyinstaller所在的路径。比如pyinstaller在D盘,则输入“D:”(不包括“下同)回车,再输入”cd pyinstaller”回车
3.把你要打包的.py文件和执行文件所需要的文件复制到你解压的文件夹中(假如你要打包hello.py)
4.输入“Configure.py”回车
5.输入“Makespec.py hello.py”回车,正确的话会产生一个hello文件夹,把这个文件夹你的hello.spec文件复制到跟hello.py一个目录里
6.输入“Build.py hello.spec”回车,正确执行后会在当前目录产生几个文件夹,在dist文件夹里的东西就是我们所需要的,最后记得把所有程序hello.py所需的文件拷到dist文件夹里。
Ⅳ 如何将一个python工程打包成一个库
安装完pyinstaller之后就可以开始了。
1.使用pyinstaller生成可执行文件的方法
1.1 将依赖文件集中到一个文件夹:
pyinstaller -D -w main.py #把main.py替换成你的主入口python文件即可。
-w参数代表main.py是一个窗体程序。
1.2 将所有依赖文件都打包到同一个可执行文件中:
pyinstaller -F -w main.py
2.调查pyinstaller生成程序的加载过程
使用如下命令,可以得到运行时的跟踪,tracing ,loader 的加载过程。
pyinstaller -Fwd aui.py #把aui.py 换成你需要侦测的文件即可。
Ⅳ 包含多个文件夹的Python项目打包为可执行文件exe
block_cipher = None
a = Analysis(['main.py', 'monitor.py',
'E:\\py_project\\test_wpf_python_msg\\src\\recognition_mole\\caption_recognizer.py',
'E:\\py_project\\test_wpf_python_msg\\src\\recognition_mole\\image_recognizer.py',
'E:\\py_project\\test_wpf_python_msg\\src\\recognition_mole\\image_vectorizer.py',
'E:\\py_project\\test_wpf_python_msg\\src\\recognition_mole\\network2.py',
'E:\\py_project\\test_wpf_python_msg\\src\\recognition_mole\\test_fun.py',
'E:\\py_project\\test_wpf_python_msg\\src\\recognition_mole\\unicom_area.py',
'E:\\py_project\\test_wpf_python_msg\\src\\recognition_mole\\unicom_area_finder.py',
'E:\\py_project\\test_wpf_python_msg\\src\\recognition_mole\\unicom_area_include_caption_judger.py',
'E:\\py_project\\test_wpf_python_msg\\src\\recognition_mole\\value_vectorizer.py'],
pathex=['E:\\py_project\\test_wpf_python_msg'],
binaries=[],
datas=[('E:\\py_project\\test_wpf_python_msg\\images', 'images'),
('E:\\py_project\\test_wpf_python_msg\\network_parameters', 'network_parameters')],
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
exclude_binaries=True,
name='main',
debug=False,
strip=False,
upx=True,
console=True )
coll = COLLECT(exe,
a.binaries,
a.zipfiles,
a.datas,
strip=False,
upx=True,
name='main')
(1)第一个列表中写所有的py文件,与main一个文件夹的可以直接写文件名,不一个文件夹的需要写完整的文件路径。
我曾试过在pathex中加入其他文件的路径,然后其他py文件不写完整路径,只写文件名,但是失败了。
(2)datas是中的元素是tuple类型,tuple的第一个参数是python项目中data文件(非py文件)的路径,
第二个参数是data在exe中保存此资源的文件夹名,要和项目中的文件夹名相同
(3)最重要: 因为编译成exe之后的main.exe是在最外层的文件夹的。因为main.py是入口文件,所以被调用的其他py文件的当前路径都是main.py文件的当前路径。所以在源代码中就一定要把main.py放到最外层的项目文件夹中,这样main.py的当前路径才能和main.exe的路径保持一致,才能让其他的py文件的当前路径不变,他们才可以找到data资源。
4.用之前配置的spec文件制作exe: pyinstaller -d main.spec
使用-d制作出来的exe比使用-f的快很多,因为-f把所有dll文件都打包到一个exe中了。
5.生成的exe在dist文件夹中
Ⅵ python 用py2exe 打包程序报错 !!! 如何打包依赖求打救.....[抓狂]
在你自己机器上运行时,确保上面说的dll在你的文件路径下就行了。system32目录一定在你路径下,把
python27\dlls
下的几个文件复制到
exe
文件目录下试试吧。再不行,改用
pyinstaller
打包吧。我现在放弃
py2exe
改用这个了,感觉比
py2exe
好。话说
py2exe
也好久没更新了好像。
Ⅶ 怎样将python程序及其依赖打包成rpm包部署
可以的,虽然说pip比较流行,但rpm从原理上完全可以覆盖这些部署过程,只有一些小的要求:
所有环境的Python安装方式必须一致,不能存在某些Python是2.6,某些是2.7,某些装在/usr/local下面,某些在/usr/lib下面之类的情况
如果带有C扩展的话,链接到的库应当是来自某个rpm包的。如果没有的话就简单多了。
如果有依赖的其他Python包的话,需要把依赖的包也做成rpm;实在偷懒也可以打进同一个rpm中。
实际上发行版中有许多Python库都以rpm的形式提供,不过一般我们嫌它版本旧,更倾向于用pip管理一组新的。
要写一个rpm spec,可以从头自己写,也可以参考一些其他软件的spec,我建议你采用后者,既然你们公司已经广泛使用rpm了,那肯定有很多本公司的spec可以参考,也有人可以问。
回到话题,写rpm spec,或者说rpmbuild的过程,分成以下步骤:
部署源代码,一般来说将一个.tar.gz复制到SRC目录中,然后用%setup宏就可以了,这个宏也基本上没干什么特别的事,就是把.tar.gz解压缩了一下,然后进入相应目录。.tar.gz只要从git中取出干净的源代码,整个目录打成tar包就可以了。好像还有专门的git-archive命令。
build过程,对应C/C++项目中的./configure, make。对Python项目来说一般可以跳过,因为setup.py都会搞定。也可以选择在这个阶段使用setup.py进行build,build出一个wheel包来,这是我推荐的方法,因为wheel包和直接setup.py install的目录结构有一些差异,而pip安装默认是按照wheel的方式。也就是说在这一步调用:setup.py bdist_wheel。再精细一点可以指定build的目标为build目录,这样需要cleanup的时候容易一些。
install过程,对应C/C++项目中的make install。一般来说我们平时怎么装这个软件,这一步就怎么装,所以我们也是使用setup.py。唯一的技巧在于,我们需要指定安装的目标到rpmbuild根的某个目录下面,而不是系统的目录。这个目录在install开始之前应当被清空。可以参考其他spec。对于我们来说,就是将Python的库安装到指定的目录,而不是系统的site-packges当中。如果你在build这一步已经打包了wheel,那么使用wheel install命令、指定目标文件夹就可以了。
打包过程,rpm的打包原理非常简单,最开始install的目录是空的,install完成后里面有了一堆文件,那么就按照文件列表将这一堆文件打包、然后指定每个文件将来应当安装到什么位置。对于Python项目来说,一般会安装package名的目录和EGGINFO两个目录,将这两个目录连同里面所有的内容一起加入%files段就可以了。如果你要部署的是某个应用,一般你还会希望将init.d中的启动脚本、或者 systemd的配置文件以及其他应用的配置文件一起部署了,可以在install的过程中将这些文件从源文件目录中复制到目标文件夹里,然后加到files段里面。
安装、卸载脚本。表现为%pre, %post之类的段一般来说如果你有服务要安装的话,需要在这里使用chkconfig, chkconfig on,或者systemd的话就是systemctl enable。如果你希望安装完有个机会修改配置文件,可以选择在首次安装的时候不要启动服务,而在update的时候启动服务,这可以通过脚本传进的第一个命令行参数$1进行判断,0、1、2表示不同的情况(分别是卸载、安装、更新,具体的记不清了),可以参考其他人写的spec;也可以选择安装完永远直接启动,在post中使用service xxx start, 在preuninstall的时候使用service xxx stop。
rpm的功能还是很强大的,除了跟pip共通的功能以外,它有一个显着的好处就是可以帮助你同时管理服务的配置、启动和停止,从而简化部署过程。不过要注意如果使用rpm的话就不要同时使用pip,否则pip更新过的库,rpm卸载或更新时会冲突。
有第三方依赖的时候,一种方法是为每个依赖项写一个独立的spec,里面内容都是上面这样的直接调用setup.py,或者更简单一些,在install的时候直接调用pip就可以;然后在需要这些依赖项的rpm包的spec当中写上Require信息,跟pip体系的requirements差不多。偷懒也可以在同一个rpm中打了一堆Python包进去,但是如果有多个独立安装的rpm都打了同一个Python包,就会冲突,要注意。
其实用习惯了会觉得也不比pip差,需要跟非Python组件混合部署的时候反而会觉得简单了很多。
Ⅷ python如何打包称exe
最近写了一个小小的程序,需要进行封装exe,为了简单,就直接用了pyinstaller这个模块,对于python3.6版本的童鞋来说,简直方便的不要。下面就给大家介绍一下如何用pyinstaller去封装程序为exe程序。
首先,需要安装一下pip这个应用,这个已经在前面的文章中说过了,windows和linux都有请借鉴windows和linux。
第二步,安装好pip之后,在cmd命令窗口中输入pip install pyinstaller即能安装上pyinstaller,那么接下来要介绍一下关于pyinstaller几个指令了:
-w指令
直接发布的exe应用带命令行调试窗口,在指令内加入-w命令可以屏蔽;
-F指令
注意指令区分大小写。这里是大写。使用-F指令可以把应用打包成一个独立的exe文件,否则是一个带各种dll和依赖文件的文件夹;
-p指令
这个指令后面可以增加pyinstaller搜索模块的路径。因为应用打包涉及的模块很多。这里可以自己添加路径。不过经过笔者测试,site-packages目录下都是可以被识别的,不需要再手动添加。
那么通常是使用-F指令,使用的语法是:pyinstaller -F (python程序名称).py