cpython vm_GitHub - guoxiangCN/PythonVm: 实现一个基于栈的Python虚拟机 (A simple implementation of Stack-Based P...

PythonVm

项目结构

-build 工程构建目录

-DLLs 用C/C++编写的库

-Lib 用Python编写的标准库

-src Python虚拟机源码

-test 测试文件目录

-build.sh 构建脚本

-CMakeLists.txt 编译的文件

编译项目

1.请确保先安装cmake,如果没有安装cmake,请执行一下命令安装

$ sudo apt-get install build-essential

$ sudo apt-get install cmake

2.本项目需要依赖Boost库 请提前下载编译

3.编译

chmod 755 build.sh

./build.sh

运行项目

官方的CPython包含编译器+虚拟机,本项目暂时不包含编译器,

因此需要利用官方的编译器执行下面命令,先将.py文件编译成.pyc文件,再由本虚拟机解释执行.

python -m compileall test.py

./mypython test.pyc

虚拟机实现过程中发现的坑这里做几下记录

1.python2和python3在切片的操作上发生了巨大变化

Python2关于切片的字节码

#define SLICE30

/* Also uses 31-33 */

#define SLICE_131

#define SLICE_232

#define SLICE_333

#define STORE_SLICE40

/* Also uses 41-43 */

#define STORE_SLICE_141

#define STORE_SLICE_242

#define STORE_SLICE_343

#define DELETE_SLICE50

/* Also uses 51-53 */

#define DELETE_SLICE_151

#define DELETE_SLICE_252

#define DELETE_SLICE_353

#define BUILD_SLICE 133/* Number of items */

Python3中关于切片的字节码就缩减为一个BUILD_SLICE,但是会额外用到BINARY_SUBSCR:

#define BUILD_SLICE 133/* Number of items */

在eval BUILD_SLICE时,原本的序列是TOP而不是POP出栈,紧接着执行BINARY_SUBSCR

此时解释器栈如下

| sliceObj|

| list |

| ... |

|_________|

python2中也有BUILD_SLICE + BINARY_SUBSCR的组合 但是经过测试 发现python2编译器

只有在切片seq[ilow:ihigh:step]都存在的时候才会编译成这个组合,其余情况都会使用上面的字节码

这个错误是一个ImportError,它指的是找不到一个名为"/usr/local/lib/python3.8/dist-packages/mmcv/_ext.cpython-38-x86_64-linux-gnu.so"的共享对象或动态链接库。具体的错误信息是"undefined symbol: Z27points_in_boxes_cpu_forwardN2at6TensorES0_S0"。 要解决这个问题,可以尝试使用ldd命令来查看"/usr/lib/python3/dist-packages/PyQt5/QtCore.cpython-37m-arm-linux-gnueabihf.so"依赖的库。可以在终端中输入"ldd /usr/lib/python3/dist-packages/PyQt5/QtCore.cpython-37m-arm-linux-gnueabihf.so"来查看。 另外,你还可以参考一个博客文章,链接为https://forums.linuxmint.com/viewtopic.php?f=47&t=291157,在这篇文章中有可能会提供一些关于解决这个问题的有用信息。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [ImportError: /usr/local/anaconda3/envs/py38/lib/python3.8/site-packages/mmcv/_ext.cpython-38-x86_64-](https://blog.csdn.net/weixin_42130300/article/details/121616567)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [报错[ImportError: /usr/lib/python3/dist-packages/PyQt5/QtCore.cpython-37m-arm-linux-gnuea]](https://blog.csdn.net/mmmm0584/article/details/119382032)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值