文章目录
- 1 代码加载顺序
- 1.1 问题场景
- 1.2 核心原理
- 2 容器化部署
- 2.1 公共部分
- 2.1.1 requirements.txt
- 2.1.2 运行相关命令
- 2.1.3 Dockerfile
- 2.2 查看进程
- 3 Nginx配置
- 3.1 WSL中安装nginx
- 3.2 修改默认配置
- 3.2.1 前端资源代理配置 (/frontend/)
- 3.2.2 API接口代理配置 (/api/)
1 代码加载顺序
1.1 问题场景
在python中如果有两个文件xxx.cpython-38-x86_64-linux-gnu.so和xxx.py在运行时会加载哪一个?
在Python中,如果存在同名的.so编译模块文件和.py源码文件,Python在运行时会优先加载.so文件(即xxx.cpython-38-x86_64-linux-gnu.so)。
1.2 核心原理
这由Python的导入机制决定。当执行代码文件xxx时,Python内置的PathFinder会遍历sys.path列表来查找模块。
在同一个目录下,Python的默认导入优先级是:
C扩展模块(.so/.pyd) > 字节码文件(.pyc) > 源码文件(.py)。
1、具体加载过程:
(1)定位模块:PathFinder在目标路径下发现了 xxx.cpython-38-x86_64-linux-gnu.so和xxx.py。
(2)生成加载蓝图:由于.so文件的优先级更高,PathFinder会返回一个包含 ExtensionFileLoader的ModuleSpec对象。
(3)激活加载器:ExtensionFileLoader会通过操作系统的动态链接库机制,直接将编译好的二进制代码加载到内存中执行,而完全忽略旁边的.py文件。
2、补充说明
(1)命名规范:你提到的.so文件名x