Python代码打包上传
为了让你的项目结构更具组织性,同时支持模块化开发,可以在my_project
中添加一个额外的目录来存放自定义的功能模块。在包含外部库的同时,拥有一个清晰的目录结构。下面是调整后的项目目录结构建议:
项目目录结构
假设项目名为my_project
,包含自定义子模块和外部库,目录结构可以设计为:
my_project/
├── __main__.py # 主入口文件,应用程序启动的地方
├── libs/ # 放置外部库的目录
│ ├── jieba/
│ ├── pandas/
│ └── numpy/
└── my_module/ # 自定义功能模块目录
├── __init__.py # 使模块成为一个包
└── utils.py # 示例自定义模块
步骤详细解析
-
设置主入口文件
在
__main__.py
中编写应用程序的启动逻辑。确保成功引入外部库和自定义模块:# __main__.py
import sys
# 确保程序能够找到libs目录,以导入第三方库
sys.path.insert(0, 'libs')
import jieba
import pandas as pd
import numpy as np
from my_module import utils
def main():
print("Libraries and custom modules loaded successfully!")
# 示例:使用jieba分词
seg_list = jieba.cut("我是AI助手")
print("分词结果: " + "/".join(seg_list))
# 示例:调用自定义模块的功能
utils.sample_function()
if __name__ == "__main__":
main() -
安装并复制外部库到项目目录
首先,确保使用虚拟环境来管理依赖,然后将必要的库复制到
libs
目录中。-
调整本地PowerShell支持权限策略
因为后续Windows激活虚拟环境时使用了ps脚本,默认情况下Windows PowerShell的执行策略会阻止脚本的运行,这个策略是Windows用来保护系统防止运行未授权脚本的方法。你可以通过更改PowerShell的执行策略来解决此问题。
- 打开PowerShell以管理员身份运行
- 查看当前执行策略
Get-ExecutionPolicy
- 将执行策略更改为RemoteSigned
Set-ExecutionPolicy RemoteSigned
- 如果系统提示确认更改,请输入“Y”确认
-
创建虚拟环境并安装库
同之前一样,创建虚拟环境并安装依赖:
PS D:\Coding Test\my_project> Get-ExecutionPolicy
RemoteSigned
# 创建mVenv虚拟环境
PS D:\Coding Test\my_project> python -m venv mVenv
# 适用于macOS/Linux
# source mVenv/bin/activate
PS D:\Coding Test\my_project> .\mVenv\Scripts\activate
(mVenv) PS D:\Coding Test\my_project> pip install jieba numpy pandas安装完成后,效果如下:
- 复制库到
libs
目录
找到虚拟环境的
site-packages
目录,然后将需要的库复制到my_project/libs
中(注意操作系统的区别):(mVenv) PS D:\Coding Test\my_project> cd .\mVenv\Lib\site-packages\
# 将项目所需的库复制到项目libs目录下
(mVenv) PS D:\Coding Test\my_project\mVenv\Lib\site-packages> Copy-Item -Recurse -Path "jieba", "pandas", "numpy" -Destination "D:\Coding Test\my_project\libs\"
# Linux下面复制
cp -r jieba pandas numpy <your_project_path>/my_project/libs/ -
-
添加自定义模块
在
my_module
目录中创建utils.py
,这是一个示例自定义模块:# my_module/utils.py
def sample_function():
print("This is a sample function from the custom module!") -
打包为 .pyz 文件
在所有功能在虚拟环境内都调试通过后,就可以退出虚拟环境,并删除虚拟目录。在项目目录外(即
my_project
父目录)运行以下命令,以将项目打包为.pyz
文件:(venv) PS D:\Coding Test> deactivate
PS D:\Coding Test> cd .\my_python_task\
PS D:\Coding Test\my_python_task> dir
目录: D:\Coding Test\my_python_task
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2024/10/11 17:41 docs
d----- 2024/10/11 18:23 libs
d----- 2024/10/11 18:31 my_module
d----- 2024/10/11 17:42 venv
-a---- 2024/10/11 18:17 447 __main__.py
PS D:\Coding Test\my_python_task> Remove-Item -Recurse -Force .\venv\
# 创建压缩包
PS D:\Coding Test> python -m zipapp .\my_python_task\ -o my_python_task.pyz在Linux下可以:
rm -rf venv
-
在 .NET 中执行
使用前面的示例,借助
Process
类来执行生成的.pyz
文件。
额外注意事项
- 在打包之前,确保删除所有不必要的文件夹,如
__pycache__
。 - 为了保证可移植性,开发和运行环境需要兼容的Python版本。
- 在实际项目中,可能需要根据需要增加更多的自定义模块或者调整目录结构。
这样设计可以确保项目结构清晰,易于管理扩展,同时又能独立运行,不依赖于外部Python环境中的库。