如何打包Python辅助文件Aux.py使其自带依赖?
问题描述
我有一个用于标准化常用数据库连接的辅助Python文件Aux.py,内容如下:
import pyodbc, sqlalchemy def Func1(param1, param2): return something
在其他项目中,我通过main.py脚本添加路径的方式导入使用其中的函数:
module_path = r'C:\Users\mypath' if module_path not in sys.path: sys.path.append(module_path) from Aux_File import Func1, Func2
现在遇到的问题是,main.py会在不同的虚拟环境(venv)中运行,每次都得手动确保对应环境安装了pyodbc、sqlalchemy这些依赖。想问问能不能把Aux.py打包成包含自身所有依赖的形式,省去重复安装的麻烦?
可行解决方案
打包成独立可执行文件(适合直接调用功能而非导入函数)
用PyInstaller可以把Aux.py打包成不依赖本地Python环境的单文件可执行程序,但这种方式生成的是可执行文件,没法在其他Python脚本中导入使用。如果你的需求是直接运行功能而非导入函数,这个方法可行,执行命令:pyinstaller --onefile Aux.py打包成Python轮子(Wheel)推荐方案
这是最适合Python模块复用的方式,能让Aux.py像标准第三方库一样安装,且自动处理依赖:- 先把
Aux.py整理成标准包结构:my_db_utils/ __init__.py Aux.py setup.py - 编写
setup.py声明依赖:from setuptools import setup, find_packages setup( name="my-db-utils", version="0.1", packages=find_packages(), install_requires=[ "pyodbc>=4.0.0", "sqlalchemy>=2.0.0" ] ) - 打包生成wheel文件:
python setup.py bdist_wheel - 在目标虚拟环境中安装这个wheel包,安装时会自动下载并安装所需依赖:
之后在pip install path/to/my-db-utils-0.1-py3-none-any.whlmain.py里就可以直接导入,不用再手动加路径:from my_db_utils.Aux import Func1, Func2
- 先把
导出依赖清单简化安装
如果不想打包成标准包,也可以先在装有依赖的环境里导出依赖清单:pip freeze > requirements.txt之后在新的虚拟环境里直接执行:
pip install -r requirements.txt这种方式虽然还是要安装依赖,但不用手动逐个输入包名,能省不少事。
内容的提问来源于stack exchange,提问作者kips
相关产品推荐
相关产品推荐

