PyPy找不到仅由* .pyc文件组成的模块

时间:2016-12-28 18:46:11

标签: python python-2.7 arm pypy

根据我客户的要求,我需要分发一个只有* .pyc文件的封闭源python程序,并且必须通过pypy运行。

该程序有一个子目录,其中导入了各种模块:

start.pyc
backends/
   server.pyc
   ...

start.py的第一行导入backends.server,它在标准" python"中运行时有效。模式。 但是,如果我删除所有* .py文件,并尝试运行

(pypy)home@user:~ python start.pyc

Traceback (most recent call last):
  File "./start.py", line 4, in <module>
ImportError: No module named backends.server

我收到错误消息,说没有名为&#39;后端&#39;被发现,即使后端&#39; subdir就在那里,server.pyc文件就在那里。

我记得有一个针对pypy的转换正是这种行为,但我似乎无法再找到它了。有什么帮助吗?

PS这是我们在嵌入式ARM系统上使用的pypy / python版本。

Python 2.7.10 (c95650101a99, Sep 06 2016, 11:02:19)
[PyPy 5.4.1 with GCC 4.7.2 20120731 (prerelease)]

1 个答案:

答案 0 :(得分:0)

以下是启用加载单个.pyc文件的方法(大多数未经测试但应该可以使用)。你需要从以下来源翻译pypy:

cd pypy/goal
./rpython -Ojit targetpypystandalone.py --objspace-lonepycfiles

如果目标是混淆,那么您也可以编写自己的导入钩子并从您自己的自定义文件格式加载模块(然后它在标准PyPy中工作)。

最后,我不确定,但我认为.pyc文件仍然可以从.zip文件中找到并加载。因此,如果您将应用程序的.pyc文件打包成.zip并使.zip可用于正常的导入机制(我认为这意味着将.zip文件本身的路径添加到sys.path中),那么它也应该在标准的PyPy中工作。

关于将.pyc文件转换回.py文件的逆向工程的简易性的通常评论适用。