python嵌入式解释器+django实现完整迁移
当一个项目比较复杂的时候,使用pyinstaller等工具无法将项目打包的时候,可以考虑将源代码+解释器一起进行拷贝。
一、下载嵌入式包
1、首先我们打开官网来到最新的官网页面Welcome to Python.org
备注:下载的页面排版更新了,如果你按老教程会找不到在什么地方
2、选择 Downloads 标签页,然后选择 Windows,点击
3、在屏幕中寻找带 embeddable 字眼的安装包,版本不受限制,不过最好和本地现有的安装版本一致
(新手不要盲目安装3.10 +的版本,许多库都还没跟上最新版本,可能会导致少数库用不了)
4、解压下载下来的文件,并将文件夹的名称改为”python“,去掉后面的版本号等配置
5、在嵌入式版目录里找到后缀为“._pth”文件(文件名视Python版本而定,例如这里是python38._pth),打开并将“import site”取消注释,保存
二、安装模块
方式1:安装pip,使用pip命令进行安装
1、修改python解释器的文件夹名称为”python“,去掉后面的版本号等后缀
2、下载git-pip.py文件
前往https://bootstrap.pypa.io/get-pip.py,然后将所有内容拷贝下来,保存到同名的文件中
3、执行get-pip.py
在python解释器目录的标题栏输入cmd
在cmd中执行 python get-pip.py 进行安装
目录中多出两个文件夹Lib和Scripts
4、目录说明
方式2:Lib目录复制到嵌入式版目录
把项目venv下(或者解释器下)的Lib目录复制到嵌入式版目录
三、启用同级包(模块)扫描
到此为止,如果你的项目足够简单,例如是只有一个文件构成Hello World,那双击启动脚本就已经可以正常运行了。
如果你的项目稍微复杂一点点,分了模块(模块和启动的文件在同级目录下)。那会遇到Python报找不到模块的错误。
例如,这里写了个测试脚本,test目录的run.py文件中,import了mod.py文件。
再例如,django启动的时候找不到创建的app文件模块,用整合后的嵌入式版Python无法启动,抛出“ModuleNotFoundError”。
产生此问题的原因:Python的官方文档(https://docs.python.org/3.8/using/windows.html#windows-embeddable)上其实有这么一行文本。直接说结论的话,嵌入式版不受环境变量的影响,安装版和嵌入式版本在加载依赖的方式上会有些差别。相比嵌入式版本,安装版会额外去扫描入口文件(也就是被运行的文件)所在的目录。
解决方法:在嵌入式版“Lib\site-packages”下新建一个文件,以“.pth”为扩展名,输入以下内容并保存:
import sys;import os;sys.path.insert(0,os.path.dirname(sys.argv[0]));
例如这里命名为了“start_path.pth”
四、python环境安装完毕
1、目录说明
2、运行