Pop的构建系统,用于构建python项目

pop-build的Python项目详细描述


简介

Pop Build是Pop项目的单一二进制构建器。当它写在 支持pop项目的意图它可以与任何python项目一起使用。在

入门

Pop-Build背后的主要思想是将python项目作为一个单独的项目来构建 容易冻结的二进制文件。因此,使用pop构建只需要几个步骤。在

因此,我们可以从一个现有的python应用程序开始,这个快速启动将假定 你的python项目有一个标准的设置.py要求.txt。在

大多数项目唯一需要的是一个运行.py。在

在运行.py

因为Pop Build只创建一个二进制文件,所以它需要一个入口点。这个条目 点定义在文件运行.py。这只是一个简单的python脚本 用于启动应用程序。的内容运行.py通常是相同的 setuptools入口点中使用的代码,或中使用的启动脚本 地区。没有什么特别的运行.py,pop build只需要 入口点是干净的python。在

注意

Setuptools创建一个启动脚本,动态地发现 应用程序启动。当应用程序启动时,这是有意义的 在有许多python库和应用程序的环境中。但是pop build创造了一个 无法满足setuptools需求的独立python环境。在

典型的运行.py将如下所示:

importmyappdefmain():myapp.start()main()

只是一些好的老Python!如果您正在构建一个pop项目,那么pop seed将 创建运行.py为你。在

运行Pop Build

没错!你所需要的一切运行.py您的python项目可能已经有了! Pop构建使用设置.py以及要求.txt用于生成所用环境的文件。在

因此,假设您定义了一个标准的python项目,您只需进行cd即可 目录并运行pop build,在本例中,我们假设应用程序调用 食品:

^{pr2}$

这将启动进程,生成的二进制文件将被放入dist/foo

既然二进制文件可用,就可以直接调用它了。在

怎么了?

Pop Build从您使用的python版本开始。这条Python 是将嵌入到二进制文件中的python。接下来,它将为您的应用程序创建一个venv。 有了venv,Pop Build就会填充它。venv中填充了所有 定义为主应用程序的需求,包括应用程序本身。在

既然venv已经设置好了,我们告诉PyInstaller从创建一个二进制文件运行.py。 但是PyInstaller所要做的就是从 这个运行.py. 这样做是为了构建一个小的二进制文件,并且只包含最需要的代码。 但对于许多应用程序来说,情况并非如此,典型的情况是延迟导入 应用程序假设有一个更大的python环境可用。这也是典型的 应用程序需要这些额外的文件,通常通过设置.py. 在

Pop-Build将venv绑定到 PyInstaller。这意味着您有一个强有力的保证,即完整、需要的环境 可用。这确实可以生成一个更大的二进制文件,但它允许更容易和可靠的构建。 另外,二进制文件通常不会大很多。在

使用Build插件

许多python项目需要C库。那是怎么回事 动态库可以添加到最后的二进制文件中吗?PopBuild对此有一个答案。在

当运行pop build时,我们可以使用一个配置文件。此文件允许任何选项 它将传递给要定义的cli,但也要定义 外部生成。在

一个Pop构建配置,作为一个例子,它添加了lib钠库,如下所示:

build:libsodium:make:-wget https://download.libsodium.org/libsodium/releases/LATEST.tar.gz-tar xvf LATEST.tar.gz-cd libsodium-stable && ./configure && makesrc:libsodium-stable/src/libsodium/.libs/libsodium.sodest:lib/

这个例子展示了如何定义一个要下载和构建的库,然后src 它是相对于构建的根目录的,而dest则是相对于根目录的 在小酒馆里。在

src可以是一个目录或一个文件列表,dest只是一个要存储的目录 文件。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java无法从spring resttemplate访问sms网关   使用spark上下文方法参数的java并行化集合不正确   java中ReadLock的并发检查副本   java基于属性比较两个列表是否具有相同的元素   字符串Java文本块:缩进前缀中的制表符和空格的混合   java如何将带有@SpringBootApplication的maven模块作为测试范围中的依赖项添加到另一个maven模块   我需要一些关于在Java中使用2个jar文件的帮助   mysql JPA Java Spring Boot执行查找/连接表   java对话框选择具有特定名称的文件   java如何修复Spring工具套件4中的端口8080错误?   Java中的apache poi Excel阅读器   java如何在tomcat访问日志中记录线程上下文值   java有一种方法可以创建类<T>的实例,该类将类作为传递泛型的构造函数中的参数   默认情况下,java GORM onetomany映射执行即时抓取   java不能在安卓中接受全局变量   统计系统的java MongoDB异步驱动程序排名   java如何解析:无法解析插件“org.springframework.ide.eclipse.ui”?   用Java从一副牌中随机抽取5张牌   javaapachecamel动态消费者   java如何克服使用Flood Fill 4算法时的“薄边界”问题?