Python项目公共模块跨目录导入及py2exe编译兼容方案咨询
Python项目通用模块导入及py2exe打包适配方案
1. 先补全规范目录结构
首先在Project根目录新增空的__init__.py文件,最终结构如下:
Project/ ├── __init__.py # 新增根包标识文件 ├── project.py # 入口脚本 ├── libs/ │ ├── __init__.py │ └── proxyHandler/ │ ├── __init__.py │ └── proxyHandler.py ├── Module 1/ │ ├── __init__.py │ └── module1.py └── Module 2/ ├── __init__.py └── module2.py
如果需要简化导入路径,可以在libs/proxyHandler/__init__.py中添加导出声明:
from .proxyHandler import ProxyHandler # 替换为你实际的类/函数名
2. 导入配置方案
方案1:环境变量配置(开发阶段推荐)
将Project根目录的绝对路径添加到系统PYTHONPATH环境变量,之后所有位置都可以直接用绝对导入:
- 入口
project.py中导入:
from libs.proxyHandler import ProxyHandler
- 子模块(比如
Module1/module1.py)中导入:
from libs.proxyHandler import ProxyHandler
运行入口脚本时也可以用-m参数避免临时配置环境变量:
python -m project
方案2:动态添加路径(兼容打包场景)
在入口脚本project.py的最开头添加路径注入代码,无需额外配置环境变量:
import sys import os # 将项目根目录加入Python搜索路径 sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
添加后所有子模块依然使用上述绝对导入写法即可。
3. py2exe单文件打包适配
编写setup.py配置文件,明确指定需要打包的自定义包即可,示例配置如下:
from distutils.core import setup import py2exe setup( name="你的项目名称", version="1.0", # 控制台程序用console,GUI程序替换为windows参数 console=[{"script": "project.py"}], options={ "py2exe": { "bundle_files": 1, # 配置为单文件打包 # 列出所有自定义包,避免打包时遗漏 "packages": ["libs", "libs.proxyHandler", "Module 1", "Module 2"], "compressed": True } }, zipfile=None # 不生成独立的zip库文件,生成真正的单exe )
打包时直接运行python setup.py py2exe即可,生成的单exe文件在dist目录下。
注意事项
- 所有自定义模块内部不要使用相对导入,统一使用从根包开始的绝对导入写法,避免打包后路径识别错误
- 打包前先直接运行
python project.py验证导入逻辑正常,再执行打包操作
内容的提问来源于stack exchange,提问作者Johnny
相关产品推荐
相关产品推荐

