精华内容
下载资源
问答
  • 如何打包发布Python程序

    千次阅读 多人点赞 2019-05-04 23:54:14
    文章目录如何打包发布Python程序打包编写setup.py文件编译发布TestPYPI发布PYPI发布附录新书推荐 如何打包发布Python程序 在使用Python的过程中,我们经常需要做的一件事情就是通过pip来安装第三方的包。那么你...

    原文首发

    如何打包和发布Python程序

    在使用Python的过程中,我们经常需要做的一件事情就是通过pip来安装第三方的包。那么你是否也曾想过pip安装的包是怎么被打包并发布上去的呢?今天就来说一说Python的第三方包的打包与发布流程!

    打包

    想要发布一个第三方的包,首先你得有一个需要发布的项目。这个项目可以完成任何有意义的事情。比如:今天的样例就是一个Python的测试报告第三方库。

    当我们把功能模块已经实现好之后,就可以按照python打包的目录结构要求来搭建了。具体步骤为:

    • 新建一个目录作为根目录
    • 把功能模块以Python包的形式放入根目录
    • 在根目录中创建setup.py文件,并填写相应内容
    • 在根目录创建其它描述文件,如:LISENCE,README等

    这里以PyTestReport项目为例,介绍Python打包的目录结构,当然还可以有其它形式的目录结构。

    PyTestReport
        |-- pytestreport
                |-- __init__.py
                |-- HTMLTestRunner.py
                |-- templates
                       |-- default.html
                |-- static
                       |-- css
                            |-- default.css
                       |-- js
                            |-- default.js
        |-- test
        |-- LICENSE
        |-- README.md
        |-- setup.py
    

    上面的目录结构就是一个典型的Python打包目录结构。其中最重要的是setup.py文件,而这个项目的功能模块就是pytestreport这个包。接下来最重要的就是如何编写setup.py文件。

    编写setup.py文件

    直接上PyTestReport的参考样例,然后我们再看看几个重要的字段就基本可以了!

    #!/usr/bin/env python
    # coding=utf-8
    from setuptools import setup, find_packages
    
    setup(
        name="PyTestReport",
        version="0.1.1",
        keywords=("test report", "python unit testing"),
        description="The HTML Report for Python unit testing Base on HTMLTestRunner",
        long_description="The HTML Report for Python unit testing Base on HTMLTestRunner",
        license="MIT",
    
        url="https://github.com/five3/PyTestReport",
        author="Xiaowu Chen",
        author_email="five3@163.com",
    
        package_dir={'pytestreport': 'pytestreport'},         # 指定哪些包的文件被映射到哪个源码包
        packages=['pytestreport'],       # 需要打包的目录。如果多个的话,可以使用find_packages()自动发现
        include_package_data=True,
        py_modules=[],          # 需要打包的python文件列表
        data_files=['pytestreport/templates/default.html', 'pytestreport/static/css/default.css', 'pytestreport/static/js/default.js'],          # 打包时需要打包的数据文件
        platforms="any",
        install_requires=[      # 需要安装的依赖包
            'Flask>=1.0.2'
        ],
        scripts=[],             # 安装时复制到PATH路径的脚本文件
        entry_points={
            'console_scripts': [    # 配置生成命令行工具及入口
                'PyTestReport.shell = pytestreport:shell',
                'PyTestReport.web = pytestreport:web'
            ]
        },
        classifiers=[           # 程序的所属分类列表
            "Programming Language :: Python :: 3",
            "License :: OSI Approved :: MIT License",
            "Operating System :: OS Independent",
        ],
        zip_safe=False
    )
    

    这个文件的上半部分字段可以自行查阅即可。这里有几个可能入坑的字段来看一下。更多详情可参考附录部分!

    • packages:需要打包的Python包目录;注意如果有子包则必须显式的列出来,如:pytestreport.api
    • data_files:需要打包的非.py文件;
    • entry_points:指定安装包之后的程序入口脚本;比如:pip命令就是通过这种方式创建的

    编译

    项目目录结构和setup.py文件都就绪之后,就可以开始编译并打包了;首先最好升级下打包相关的基础库。

    python -m pip install --upgrade pip
    pip install --upgrade setuptools wheel
    

    接着,从命令行进入项目的根目录,通过如下命令即可进行编译打包操作:

    python setup.py sdist       # 打源码包
    python setup.py bdist       # 打二进制包
    python setup.py bdist_egg       # 打egg包
    python setup.py bdist_wheel     # 打wheel包
    

    执行完命令之后,会在项目的根目录创建一个dist目录,所有打包的文件都存放在此目录下。

    在打包后,可以本地进行安装和使用测试,当然你也可以通过如下命令直接安装:

    python setup.py build
    python setup.py install
    

    发布

    当我们的项目打包并测试完成之后,就可以开始发布之旅了!首先你得需要安装另一个基础库。

    pip install twine
    

    此外,你还需要在PYPI的官网上进行账号的注册!当然官方会建议你先在一个叫TestPYPI的测试镜像服务上先进行预发布。当在TestPYPI服务上发布成功并进行完安装和使用测试之后,再把项目包发布到PYPI服务上。

    TestPYPI发布

    首先在https://test.pypi.org/account/register/注册一个账户。然后在项目根目录执行如下命令:

    twine upload --repository-url https://test.pypi.org/legacy/ dist/*
    # entry your username and password
    

    过程中会需要你输入注册的账号信息,等上传完成之后可以通过如下的方式来进行包的安装。

    pip install --index-url https://test.pypi.org/simple/ PyTestReport
    

    你也可以直接通过https://test.pypi.org/manage/projects/来查看你已经上传的项目,并通过点击[View]来查看项目的具体信息。
    PYPI Projects

    安装完成之后,则需要测试下安装包是否能正常的工作,指定的入口脚本是否安装并正常使用,如果一切正常那么恭喜你了发布到正式的PYPI服务了!

    PYPI发布

    同样的你需要在PYPI的官网https://pypi.org/account/register/注册一个账号。然后执行一个上传操作:

    twine upload dist/*
    # entry your username and password
    

    上传完成之后通过如下命令可直接安装:

    pip install PyTestReport
    

    同样的,你也可以通过https://pypi.org/manage/projects/来查看和管理已上传的项目。
    PYPI Projects

    附录

    新书推荐

    Python Web自动化测试设计与实现

    获取更多关于Python和自动化测试的文章,请扫描如下二维码!
    关注二维码

    展开全文
  • Python程序发布 Python程序发布时,通常包括以下三种形式: py源码:即源程序代码,使用时需要Python执行环境(包含对应的依赖库) pyc形式:由py文件编译生成,源码私密性提升、...Python程序打包成可执行程序工...

    Python程序发布

    Python程序发布时,通常包括以下三种形式:

    • py源码:即源程序代码,使用时需要Python执行环境(包含对应的依赖库)
    • pyc形式:由py文件编译生成,源码私密性提升、运行速度提升
    • 可执行文件:可直接运行的程序文件,不同平台(Mac/Linux/Windows…)下的格式不同,与平台强关联。无须额外下载依赖程序,指定平台下可直接使用

    Python程序打包成可执行程序工具比较

    Python程序打包成可执行程序工具比较:
    链接地址:https://docs.python-guide.org/shipping/freezing/
    在这里插入图片描述

    1.安装一个pyInstaller

    在pycharm里点 file —–>setting—–>Project workspace——>Interpreter
    ——>点pip右边的+号,进入下面这个界面:
    在这里插入图片描述
    搜索pyInstaller, 点击左下方Iinstall package安装(出现错误了可以多安装几次)
    (或者在命令提示符界面 用 pip install pyinstaller命令安装)

    2.将.py文件打包成.exe文件

    在完成第一步的安装后,就开始我们的打包
    在打包之前可以先运行一下你要打包的.py文件是否可以运行,然后进行打包
    在pycharm中右键点击你将要打包的文件,找到Open in terminal点一下
    在这里插入图片描述

    在下面出现的Local 框内输入命令 pyinstaller -F 文件名 运行
    在这里插入图片描述
    打包完成后,稍等一下会刷新出一个dist文件夹, 点击 ,在里面有一个 .exe文件,右键,点击里面的 Show in Explore 找到一个.exe文件(如果不一样的可以看一下你下面打包成功后出现的路径。)
    在这里插入图片描述

    3.发送

    将打包好的.exe文件拉到你之前.py文件所在的文件夹,将所有需要的素材一起发送
    别人收到后就能打开你的.exe文件运行你的程序

    展开全文
  • 就像这样:helloPython 程序都是脚本的方式,一般是在解析器里运行,如果要发布出去,需要提前安装解析器才可以运行,为了在 Windows 里方便发布,只要点击一个 EXE 文件运行,并且打包所需要库文件,这样发布给用户...

    于是我想是不是可以将我的程序打包成可执行文件,直接运行?

    就像这样:

    hello

    Python 程序都是脚本的方式,一般是在解析器里运行,如果要发布出去,需要提前安装解析器才可以运行,为了在 Windows 里方便发布,只要点击一个 EXE 文件运行,并且打包所需要库文件,这样发布给用户使用就会更方便。

    1、PyInstaller 简介

    PyInstaller 是一个十分有用的第三方库,可以用来打包 python 应用程序,打包完的程序就可以在没有安装 Python 解释器的机器上运行了。

    它能够在 Windows、Linux、 Mac OS X 等操作系统下将 Python 源文件打包,通过对源文件打包, Python 程序可以在没有安装 Python 的环境中运行,也可以作为一个 独立文件方便传递和管理。

    PyInstaller 支持 Python 2.7 / 3.4-3.7。可以在 Windows、Mac OS X 和 Linux 上使用,但是并不是跨平台的,而是说你要是希望打包成 .exe 文件,需要在 Windows 系统上运行 PyInstaller 进行打包工作。

    下面我们以 为例来进行程序的打包工作。

    2、安装

    安装成功:

    安装成功

    3、使用

    其中, 表示打包成单独的 .exe 文件,这时生成的 .exe 文件会比较大,而且运行速度回较慢。仅仅一个 helloworld 程序,生成的文件就 5MB 大。

    另外,使用 还可以指定可执行文件的图标;

    表示去掉控制台窗口,这在 GUI 界面时非常有用。不过如果是命令行程序的话那就把这个选项删除吧!

    PyInstaller 运行时会对脚本进行解析,并做出如下动作:

    1、在脚本目录生成 helloworld.spec 文件;

    2、创建一个 build 目录;

    3、写入一些日志文件和中间流程文件到 build 目录;

    4、创建 dist 目录;

    5、生成可执行文件到 dist 目录;

    执行流程:

    运行完成后会生成 build 和 dest 两个目录:

    生成两个目录

    dest 目录中可以找到可执行 .exe 文件:

    生成的可执行文件

    4、注意事项

    1、直接运行最终的 .exe 程序,可能会出现一闪而过的情况,这种情况下要么是程序运行结束(比如直接打印的 helloWorld),要么程序出现错误退出了。

    这种情况下,建议在命令行 cmd 下运行 .exe 文件,这时就会有文本输出到窗口;

    2、 是改变图标的,但是我发现是有些 bug 的,客官请看:

    图标变化

    放大过程中,图标才变成了我们设置的图标。

    3、写代码的时候应当有个良好的习惯,用什么函数导什么函数,不要上来 import 整个库,最后你会发现你一个 100KB 的代码打包出来有 500MB;

    4、当你的代码需要调用一些图片和资源文件的,这是不会自动导入的,需要你自己手动复制进去才行。不然 exe 文件运行时命令窗口会报错找不到这个文件。

    导入方法:

    假设程序中需要引入一个 文件,首先我们运行:

    此时会生成一个 文件,这个文件会告诉 pyinstaller 如何处理你的脚本,pyinstaller 创建一个 exe 的文件就是依靠它里面的内容进行执行的。

    正常情况下你不需要去修改这个 spec 文件,除非你需要打包一个 dll 或者 so 文件或者其他数据文件。

    那么我们就需要修改这个 spec 文件:

    修改为:

    然后在生成 exe 文件:

    然后生成的文件就可以正常引入外部文件了。

    5、总结

    本文只是使用 PyInstaller 打包流程进行简单的介绍,更多内容可以参见官方文档:https://pyinstaller.readthedocs.io。

    另外,本文是在 Windows10 下运行的,Mac、Linux 也可以打成相应的包,有兴趣的小伙伴在你的 MBP 上试下吧~

    欢迎留言交流。

    END

    本公众号全部博文已整理成一个目录,请在公众号里回复「1024」获取!

    展开全文
  • Python模块、扩展和应用程序可以按以下几种形式进行打包发布python setup.py获取帮助的方式python setup.py --helppython setup.py --help-commands 所有可以使用的命令,如build,installpython setup.py ...

    Python模块、扩展和应用程序可以按以下几种形式进行打包和发布:

    python setup.py获取帮助的方式

    python setup.py --help

    python setup.py --help-commands 所有可以使用的命令,如build,install

    python setup.py COMMAND --help 获取特定命令的帮助

    python setup.py COMMAND --help-formats 获取特定命令支持使用的格式

    打包

    1.压缩文件(使用distutils)

    Windows的Zip文件和类Unix平台的.tar.gz文件

    2.自动解包或自动安装可执行文件

    Windows中的.exe文件

    3.自包含的,不要求安装的预备运行科执行程序

    Windows的.exe文件、Unix上带有一个小的脚本前缀的ZIP压缩文件、Mac上的.app文件等

    4.平台相关的安装程序

    Windows上的.msi文件、Linux上常见的.rpm、src.rpm和.dep文件等

    5.Python eggs

    较流行的第三方扩展

    发布

    “发布”是指一个文件集合,这些文件联合在一起可使用distutils构建、打包和发布模块

    创建好的发布可以用于安装,可上传到ftp,上传到各大网络让人下载,也可上传到PyPI与他人共享

    创建发布

    将各代码文件组织到模块容器中

    准备一个README或README.txt文件

    而后在容器中创建setup.py文件

    setup.py中setup()中可用参数:

    platforms: 平台列表

    license: 许可证

    py_modules: 各模块名称组成的列表,此些模块可能位于包的根目录下(modname),也可能位于某子包目录中(subpkg1.modname)

    packages: 各子包名称的列表

    ......

    setup.py关键字大体分为两类:

    1.元数据信息

    2.包中的内容列表

    python setup.py sdist打包(会指定默认格式tar.gz)

    可以为sdist指定打包格式:

    zip: zip file

    gztar: tar.gz file

    bztar: tar.bz2 vil2

    ztar: tar.Z file

    tar: tar file

    指定格式sdist打包的方式:[root@kurol pkg1]# python36 setup.py sdist --help-formats

    List of available source distribution formats:

    --formats=bztar bzip2"ed tar-file

    --formats=gztar gzip"ed tar-file

    --formats=tar uncompressed tar file

    --formats=xztar xz"ed tar-file

    --formats=zip ZIP file

    --formats=ztar compressed tar file

    python setup.py bdist打包(二进制发行版)(会指定默认格式tar.gz)

    可以为bdist指定的格式:

    gztar: tar.gz file

    ztar: tar.Z file

    zip: zip file

    rpm: RPM Package

    pkgtool: Solaris pkgtool

    wininst: Windows上自解压的zip格式包

    msi:Microsoft Installer

    指定格式sdist打包的方式:[root@kurol pkg1]# python36 setup.py bdist --help-formats

    List of available distribution formats:

    --formats=rpm RPM distribution

    --formats=gztar gzip"ed tar file

    --formats=bztar bzip2"ed tar file

    --formats=xztar xz"ed tar file

    --formats=ztar compressed tar file

    --formats=tar tar file

    --formats=wininst Windows executable installer

    --formats=zip ZIP file

    --formats=msi Microsoft Installer

    打包 ,例:[root@kurol python361]# cd pkg1/

    [root@kurol pkg1]# ls

    __init__.py __pycache__ mymmm.py

    [root@kurol pkg1]# touch REMAIN.txt

    [root@kurol pkg1]# touch setup.py

    [root@kurol pkg1]# vim setup.py#!/usr/bin/python36

    #

    from distutils.core import setup

    setup(

    name = "pkg1",

    version = "1.0",

    author = "MageEdu",

    author_email = "email@mykurol.com",

    py_modules = ["mymmm"],

    url = "http://www.mykurol.com",

    download_url = "http://www.mykurol.com/pymodules/download/",

    description = "test module",

    )[root@kurol pkg1]# python36 setup.py sdist

    running sdist

    running check

    warning: sdist: manifest template "MANIFEST.in" does not exist (using default file list)

    warning: sdist: standard file not found: should have one of README, README.txt

    file yammm.py (for module yammm) not found

    writing manifest file "MANIFEST"

    creating pkg1-1.0

    making hard links in pkg1-1.0...

    hard linking setup.py -> pkg1-1.0

    creating dist

    Creating tar archive

    removing "pkg1-1.0" (and everything under it)

    [root@kurol pkg1]# ls ##自动生成了MANIFEST文件

    MANIFEST REMAIN.txt __init__.py __pycache__ dist mymmm.py setup.py

    [root@kurol pkg1]# cd dist/

    [root@kurol dist]# ls

    pkg1-1.0.tar.gz

    使用bdist[root@kurol dist]# cd -

    /opt/python361/pkg1

    [root@kurol pkg1]# python36 setup.py bdist

    running bdist

    running bdist_dumb

    running build

    running build_py

    file yammm.py (for module yammm) not found

    file yammm.py (for module yammm) not found

    installing to build/bdist.linux-x86_64/dumb

    running install

    running install_lib

    warning: install_lib: "build/lib" does not exist -- no Python modules to install

    running install_egg_info

    Creating build/bdist.linux-x86_64/dumb/usr/local/python361/lib/python3.6/site-packages/

    Writing build/bdist.linux-x86_64/dumb/usr/local/python361/lib/python3.6/site-packages/pkg1-1.0-py3.6.egg-info

    Creating tar archive

    removing "build/bdist.linux-x86_64/dumb" (and everything under it)

    [root@kurol pkg1]# cd dist/

    [root@kurol dist]# ls

    pkg1-1.0.linux-x86_64.tar.gz pkg1-1.0.tar.gz

    指定为zip格式:[root@kurol pkg1]# python36 setup.py bdist --formats=zip

    running bdist

    running bdist_dumb

    running build

    running build_py

    file yammm.py (for module yammm) not found

    file yammm.py (for module yammm) not found

    installing to build/bdist.linux-x86_64/dumb

    running install

    running install_lib

    warning: install_lib: "build/lib" does not exist -- no Python modules to install

    running install_egg_info

    Creating build/bdist.linux-x86_64/dumb/usr/local/python361/lib/python3.6/site-packages/

    Writing build/bdist.linux-x86_64/dumb/usr/local/python361/lib/python3.6/site-packages/pkg1-1.0-py3.6.egg-info

    creating "/opt/python361/pkg1/dist/pkg1-1.0.linux-x86_64.zip" and adding "." to it

    adding "usr/local/python361/lib/python3.6/site-packages/pkg1-1.0-py3.6.egg-info"

    removing "build/bdist.linux-x86_64/dumb" (and everything under it)

    [root@kurol pkg1]# cd dist/

    [root@kurol dist]# ls

    pkg1-1.0.linux-x86_64.tar.gz pkg1-1.0.linux-x86_64.zip pkg1-1.0.tar.gz

    安装包

    python setup.py install

    build and install:

    python setup.py build:

    --build-base /path/to/build_dir ##指定build路径,build在其他路径进行,保证源码的整洁程度

    lib,lib.platform

    第三方模块的大多数默认路径通常为:site-packages(站点包)

    如 /usr/local/python361/lib/python3.6/site-packages

    第三方模块自定义安装路径:

    --user 如果用户没有写权限,安装到指定用户的目录下(只有普通权限,没有办法写到公共目录中)

    --prefix 指定python库文件的安装路径(对公共目录有写权限才能操作)

    --exec-prefix 跟python无关的,有其他语言所实现的跟平台有关的,已经编译好的相关文件的安装路径(对公共目录有写权限才能操作)

    深度定制 (期望对python模块安装做深度定制)(路径都是自己定义):

    --install-purelib /path/to/python_lib (纯Python库文件)

    --install-platlib /paht/to/plat_lib (扩展模块,其他语言所实现的)

    --install-lib /path/to/lib ( 也可不加区分)

    如果同时出现前面3种,第三种lib覆盖前面2种,lib优先级最高。

    --install-scripts /path/to/bin(可执行文件的安装路径)

    --install-data (指定数据文件安装路径)

    --install-headers(指定C代码的头文件安装路径)

    原文地址:http://kurolz.blog.51cto.com/11433546/1935033

    展开全文
  • Python项目打包发布方法

    万次阅读 多人点赞 2018-12-29 11:56:07
    目前python打包工具有多个,目前比较好用的为pyinstaller,该工具可以支持在window和linux下使用。 在windows下,大小为几十K的源文件打包成exe文件,可能为几十兆,原因是把程序所引用的库文件也一起打包在一起。...
  • 如果要公开发布程序,最常见的方式就是打包成exe程序了。打包的好处是使用者不需要考虑Python的运行环境,且也容易被接受。但不好的是一般打包出来的程序都比较大,而且由于是依靠模块打包,有可能出现兼容性等问题...
  • Python 程序都是脚本的方式,一般是在解析器里运行,如果要发布出去,需要提前安装解析器才可以运行,为了在 Windows 里方便发布,只要点击一个 EXE 文件运行,并且打包所需要库文件,这样发布给用户使用就会更方便...
  • Python程序发布

    2019-05-11 12:26:46
    如何打包发布Python程序 https://blog.csdn.net/five3/article/details/89820000 记录自己将Python程序打包成rpm包的过程 https://blog.csdn.net/qq_21398167/article/details/52996794 程序员如何正确...
  • Python是一种面向对象的解释型计算机程序设计语言,现在很多人都在使用,尤其是其跨平台特性及自然语言属性,获得很多人的钟情,那么如何Python程序打包为Windows系统中的exe可执行程序呢
  • python打包发布方法

    2015-06-02 17:49:38
    如何发布打包自己的python程序
  • 最近写了一个小小的程序,需要进行封装exe,为了简单,就直接用了pyinstaller这个模块,对于python3.6版本的童鞋来说,简直方便的不要。下面就给大家介绍一下如何用pyinstaller去封装程序为exe程序。 首先,需要安装...
  • python程序打包工具py2exe/pyInstaller

    千次阅读 2013-03-22 12:41:13
    Python脚本如何打包exe 如果本地编写的py脚本需要分发的时候,需要考虑到可能有的设备没有安装py编译器,这时候对于windows设备适用的方法就是打包成exe程序,随同所需要的.pyd和.dll库一同发布。 使用的工具:...
  • <p>1.Python程序一般都是如何实现更新的,pyinstaller打包的可执行文件能否进行更新? <p>2.能否实现在云端发布更新文件,给程序一个命令,让程序自动下载后自我更新</strong>?更新...
  • 需要解释器来进行解释以后才可以执行,而Python源代码需要在Python虚拟机上面运行,但是我们做好的程序,不可能给用户使用的时候还让他安装一个Python环境,所以今天我们讲解如何Python程序打包为exe可执行文件,...
  • 本文介绍如何使用py2exe来将python程序打包成文件。以上一篇文章《Python:一个多功能的抓图工具开发(附源码)》中的源程序为例进行讲述。  1、下载并安装py2exe,可在www.py2exe.org上下载最新版本。  2、编写...

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 191
精华内容 76
关键字:

python程序如何打包发布

python 订阅