2016-12-28 5 views
0

По просьбе моего клиента мне нужно распространять закрытую исходную программу python только с * .pyc-файлами и запускать через pypy.PyPy не находит модуль, состоящий только из * .pyc-файлов

Программа имеет подкаталог, в котором различные модули импортируются:

start.pyc 
backends/ 
    server.pyc 
    ... 

первую линию импорта backends.server start.py, и он работает, когда работает в стандартном режиме «питон». Но если я раздеться все * .py файлов, и попробуйте запустить

(pypy)[email protected]:~ python start.pyc 

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

Я получаю сообщение об ошибке говорящее модуля не с названием «движками» найдено, даже если подкаталог-х бэкэндов "есть, и сервер Файл .pyc есть.

Я помню, что для такого поведения был переключатель для pypy, но я больше не могу его найти. Любая помощь?

PS Это версия pypy/python, используемая нами для встроенной системы ARM.

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

Файлы '.pyc' содержат байт-код CPython. PyPy имеет собственное внутреннее представление кода, что делает (насколько мне известно) '.pyc' файлы, несовместимые с PyPy. Та же проблема задается в этом списке рассылки: https://mail.python.org/pipermail/pypy-dev/2011-May/007395.html –

+0

Это кажется странным, потому что из PyPy venv я могу запускать 'python -m compileall , 'и восстановить все * .pyc моих проектов. Я думаю, что PyPy создается с помощью Pypy-совместимого способа. Более того, если я выполняю pyc-файл с pypy, он дает мне вышеприведенную ошибку, которая имеет смысл и согласован с тем, что должно быть в pyc (то есть в импорте) – zontar

ответ

0

Здесь можно включить загрузку одиночных .pyc-файлов (в основном непроверенных, но должно работать). Вам нужно перевести PyPy из источников с:

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

Если запутывания цели, то вы также можете написать свой собственный импорт крюк и загрузить модули из своего собственного формата пользовательских файлов (то он работает в стандартном PyPy) ,

Наконец, я не уверен, но я думаю, что .pyc-файлы все еще найдены и загружены из .zip-файлов. Поэтому, если вы упаковываете файлы .pyc приложения в .zip и делаете .zip доступным для обычного механизма импорта (я думаю, что это означает добавление пути к самому .zip-файлу в sys.path), тогда он должен работать в стандартный PyPy тоже.

Обычные комментарии об легкости обратного преобразования .pyc-файлов обратно в .py-файлы применяются.

+0

Спасибо, но перевод с помощью rpython не работает, поскольку я, похоже, не есть rpython на машине. Я помню, как это делалось несколько месяцев назад более простым способом. И переключатель командной строки --objspace-lonepycfiles не распознается pypy (либо с синглой, либо с двойной тире, он рассматривается как неизвестный вариант). Может быть, я призываю неправильный путь? – zontar

+0

Это не вариант, который вы можете дать pypy во время выполнения. Если вы не хотите исследовать, как перевести пользовательскую пипью, попробуйте выбрать .zip. –

+0

спасибо, но не могли бы вы уточнить? Shoud Я что-то меняю в инструкции по импорту перед упаковкой всего в почтовый индекс? У вас есть ссылка, кроме https://docs.python.org/2/library/zipimport.html? Спасибо – zontar