1.Python 中的源码依赖 requirements.txt 与 setup.py
2.逆向pyinstaller打包的exe软件,获取python源码(6)
3.安装python3
4.Python包管理
5.Linux离线Python源码编译及python版本升级
6.Python教程:使用PyInstaller打包Python应用
Python 中的源码依赖 requirements.txt 与 setup.py
Python 中的 requirements.txt、setup.py 和 setup.cfg 的源码依赖用途
对于新手来说,管理 Python 项目中的源码依赖依赖项非常具有挑战性,这一问题由历史原因引起,源码依赖并且一直受到吐槽。源码依赖源码编辑器小说怎么加视频
本文将探讨如何正确管理 Python 项目的源码依赖依赖关系。具体来说,源码依赖将讨论 requirements.txt 文件的源码依赖用途,以及如何使用 setuptools 来分发自定义的源码依赖 Python 包,并让其他用户进一步使用和开发它。源码依赖此外,源码依赖还将讨论设置文件(即 setup.cfg 和 setup.py)的源码依赖用途,以及如何将它们与需求文件一起使用,源码依赖从而使包开发和重新分发的源码依赖过程变得更容易。
Python 项目的依赖关系是什么
让我们从包依赖开始,介绍它们到底是什么,以及如何正确管理它们,因为这样可以使 Python 项目变得更容易维护。
简单来说,依赖项是我们 Python 项目所依赖的外部其他 Python 包,例如在 AI 方向,最常用的包是 Numpy 和 Pandas。在 Python 中,这些依赖通常可以在 Python 包索引(PyPI)或其他管理工具中找到(例如 Nexus),以下以 PyPI 为例介绍,因为它是最常用且大家都在用的包管理工具。
现在,使用源码安装yum我们的 Python 项目可能需要引用某个特定版本的第三方包有依赖。这种情况可能会导致依赖冲突的出现,因为我们所有的依赖中(至少)有两个依赖项可能依赖同一个包,但每个依赖项都需要该外部包的特定版本(比如一个需要 1.0,而一个需要 2.0)。在这种情况下,我们需要告诉 pip 如何处理依赖关系,以及我们需要哪些特定版本。
一般情况下,我们需要 requirements.txt 来指定项目的依赖包和版本,因此先看看 requirements.txt 的格式。
requirements.txt 文件
requirements.txt 是一个文件,列出了 Python 项目的所有依赖项。如前所述,它还可能包含依赖项的依赖项。除了列出依赖包名称外,还可以指定特定的版本(使用 ==)、>= 或 <=,甚至两者都指定。
示例 requirements.txt 文件
matplotlib >= 2.2 numpy >= 1..0, < 1..0 pandas pytest == 4.0.1
然后可以使用以下命令通过 pip 安装这些依赖项(通常在虚拟环境中):
pip install -r requirements.txt
在上面的示例中,我们指定了一些依赖项。例如,对于没有关联版本的 pandas 包,pip 将正常安装最新版本,除非其他依赖项之一与它有任何冲突(如果有冲突,pip 将安装满足其余依赖项指定条件的最新 pandas 版本)。对于 pytest,源码编译安装proftp包管理器将安装特定版本(即 4.0.1),而对于 matplotlib,将安装至少大于或等于 2.2 的最新版本(这还取决于是否有其他依赖项具体要求,如果没有则会安装符合条件的最新版)。对于 numpy 包,pip 将尝试安装 1..0(包含)和 1..0(不包含)之间的最新版本。
在安装所有依赖项后,可以通过运行 pip freeze 来查看虚拟环境中安装的每个依赖项的确切版本。此命令将列出所有包及其特定版本(即 ==)。
requirements.txt 非常有用,但它仅针对我们项目的开发和发布(例如线上部署等)。如果我们想将我们的代码发布到 PyPI 供其他人使用,那么需要的不仅仅是这个文件。
Python 中的 setuptools
setuptools 是构建在 distutils 之上的包,它可以帮助开发人员快速发布 Python 包。此外,它还提供了使依赖管理更容易的功能。
当想要发布一个包时,通常需要填写一些元数据,例如包名、版本、依赖项、入口点等。setuptools 就提供了简化这些操作的功能。
项目的元数据等信息需要在 setup.py 文件中定义,例如下面的 demo:
我们所填写的信息都是纯声明性的,因此一个更好的软件源码怎么保存方法是在名为 setup.cfg 的文件中定义这些元数据和信息,然后只需在 setup.py 文件中调用 setup() 即可。setup.cfg 文件如下所示:
这样在我们的 setup.py 文件中只需要保留最少的代码:
上面 install_requires 参数与 requirements.txt 类似,可以使用运算符 <、>、<=、>=、== 或!=,后跟版本标识符。当项目安装时会根据该配置来下载和安装依赖。
我们需要 requirements.txt 和 setup.py/setup.cfg 文件吗?
这就需要分情况对待了。首先,requirements.txt 与 setup.py 之间的通常用于实现不同的需求:
另外,如果同时使用两者,setup.py(setup.cfg)文件应包含抽象依赖项列表,而 requirements.txt 文件必须包含具有每个包版本的特定引脚的具体依赖项(使用 == 指定特定版本)。
以下是 Python 文档中官方的定义:
install_requires(即 setup.py)定义了单个项目的依赖关系,而 requirements.txt 通常用于定义完整的 Python 环境。
尽管 install_requires 要求很少,但 requirements.txt 通常包含详尽的固定版本列表,以实现完整环境的可重复安装。
来自: packaging.python.org/en...
总结
本文讨论了在开发 Python 项目和应用程序时适当的依赖管理的重要性。并且介绍了 requirements.txt 文件的用途以及如何将它与 setuptools 的配置文件(即 setup.py 和 setup.cfg)一起使用,这样可以保证其他开发人员可以安装、运行、开发甚至测试源代码 Python 包的代码。
setuptools 不能完全替代 requirements.txt 文件。liif模型源码详解在大多数情况下,可能需要这两个文件同时存在,这样才能够正确管理包依赖和进行包的发布。
逆向pyinstaller打包的exe软件,获取python源码(6)
在之前的讨论中,我们已经成功逆向了由pyinstaller打包的exe程序的主程序。然而,关于其依赖的python文件,其实获取方法相当直接。关键在于PYZ-.pyz_extracted文件夹,其中包含编译exe时转化为pyc格式的依赖文件。只要对这些pyc文件进行逆向,就能揭示出整个exe的所有python源代码,这种方法屡试不爽。然而,有知乎网友推荐使用Nuitka进行exe打包,以增加代码的防护,防止源码被轻易反编译。具体步骤如下:首先,进入PYZ-.pyz_extracted文件夹,你将发现所需的依赖文件。
接着,对这些pyc文件进行逆向处理,从而获取到全部的python源代码。
在pycharm等开发环境中,打开这些源代码,解决任何依赖关系问题。
最后,直接运行你修改后的代码,程序即可成功启动。
安装python3
在centos7系统环境下进行Python 3的安装
使用YUM进行编译安装
1. 首先更新系统软件包
2. 接着安装必要的依赖项
3. 下载Python 3..2的源码包
4. 解压源码包
5. 进入解压后的目录
6. 编译并安装Python
注意:应使用make altinstall命令而非make install命令,以避免覆盖系统自带的Python版本
7. 将Python添加到系统环境变量:
或直接在/etc/profile中手动添加python3的路径
为python3.创建python3的软链接
8. 检查Python版本
如果输出的版本号显示为Python 3..2,则表示安装成功
现在,Python已经成功安装至/soft/目录下,并且被添加到了系统环境变量中
安装完毕后,可以使用pip3命令来安装Python 3的软件包。例如:
Python包管理
本文主要探讨Python的依赖包管理工具,Pip与Conda之间的差异和应用场景。Pip是Python官方推荐的包管理工具,主要从Python Package Index (pypi)下载Python软件包,支持wheel或源码安装,但需要与兼容编译器配合。Conda则是个更全面的包和环境管理器,能从Anaconda repository和Anaconda Cloud获取Python、C/C++和R等语言的二进制软件包,无需编译,且支持创建独立环境隔离不同版本包的安装。
Pip与Conda的主要区别在于:Pip仅限于Python包,且安装依赖时不处理版本冲突,可能需要借助如pipenv、poetry或hatch等工具;而Conda则能管理多语言包,创建独立环境避免版本冲突,且自动处理依赖关系。Anaconda repository和Cloud中的包数量相比pypi虽少,但在特定情况下,如某些软件仅在Anaconda可用时,两者需结合使用。
此外,文章还介绍了如何使用pypiserver搭建本地Python包源,以及如何配置密码保护或无密码访问。对于Conda的使用问题,如果遇到安装时的错误,需要通过查阅错误信息并采取相应解决方法来调试。
在实际操作中,Pip和Conda的选择取决于项目需求和特定环境,理解它们的差异和优势,能更好地管理Python项目的依赖和环境。
Linux离线Python源码编译及python版本升级
配置环境
初始化干净的centos7.8镜像,并搭建本地镜像源,详情可参考Linux 镜像源临时挂载+永久挂载+yum本地源制作 - 蜡笔小新的文章 - 知乎。
下载Python源码,版本选用Python-3.9..tar.xz。
编译Python
因高版本Python编译需高版本GCC,系统默认GCC版本为4.8.5,需先升级GCC。
执行Centos离线源码编译高版本GCC并升级教程:Linux Centos7.8.系统离线GCC源码编译升级 - 蜡笔小新的文章 - 知乎。
由于未安装make编译工具和依赖,需先执行yum -y install automake autoconf libtool make以完成安装。
编译Python源码至/opt/python3.9.,过程未出现错误。
升级Python版本
编译安装后,已将新版本安装至指定目录,但未升级原有Python版本。
通过ll /usr/bin/python查看,当前Python版本软链接指向/usr/bin/python2.7。
删除或备份当前Python软链接,避免影响yum工具。
修改yum工具文件路径,将“#!/usr/bin/python”更改为“#!/usr/bin/python2.7”。
最后,创建新编译Python3.9.的软链接及pip3软链接。
成功在Centos7.8上升级Python3.9.版本,同时确保原有yum工具可使用Python2.7版本。
Python教程:使用PyInstaller打包Python应用
Python应用共享时,用户需先安装Python及依赖,操作繁琐且技术门槛较高。PyInstaller作为第三方工具,简化了这一过程。
PyInstaller通过打包Python代码和依赖,用户只需解压文件即可运行应用,类似静态语言编译,与Java分发带JRE的jar包相似。然而,输出与操作系统和Python版本绑定,不包含操作系统自带库。且无法实现完全的代码隐藏,输出应用包含已编译的pyc文件,反向编译仍有可能。
使用PyInstaller打包应用的步骤:编写应用代码,使用命令行工具PyInstaller打包应用代码和依赖。打包后可作为文件夹或文件分发给其他人,用户无需安装Python或模块即可运行。
注意,PyInstaller打包的输出与操作系统和Python版本相关联,需在特定操作系统上使用特定版本的Python打包应用。应用不包含操作系统自带库,依赖系统提供。PyInstaller不支持隐藏源代码,使用Cython编译Python代码为C代码,再编译为机器码,可实现更高程度的代码隐藏。
下面是一些使用PyInstaller打包应用的示例:
### 示例1: 最简单的使用方法
假设应用代码包含一个简单的Tkinter应用,没有任何第三方依赖。
建立并进入虚拟环境,安装PyInstaller。执行打包命令。
查看dist目录下生成的文件,包含可执行文件和运行时依赖文件夹。将其压缩发送给用户,用户解压即可直接运行。
若希望生成一个单独的可执行文件,可增加一个选项将运行时依赖打包至文件。
运行此可执行文件时,会显示一个额外的Console窗口。对于GUI应用,可采用两种方法移除此窗口。
### 示例2: 多文件应用
将单文件应用拆分为多个文件,分别命名为multi_1.py和multi_2.py。打包应用时,只需指定启动文件即可。
### 示例3: 有外部依赖的应用
编写一个包含外部依赖的应用,如one_file_dep.py。在打包前,通过requirements.txt文件管理依赖,执行打包命令时,一并安装依赖。
在打包过程中,使用--log-level=DEBUG选项查看构建过程中的依赖图。将生成的.dot文件转换为,以便更直观地查看依赖关系。
总结了使用PyInstaller打包Python应用的流程、注意事项及示例,希望对开发者在共享应用时提供帮助。