Python не обнаруживает.pyc файлы

Я использую Python 3.2 (как для сборки, так и для выполнения), и вот мой вопрос.

Я намерен отправить свое приложение на Python со следующей настройкой:

Есть основной сценарий (скажем, Main.py), который использует скомпилированный модуль, скажем Module1.pyc). Чтобы быть точным, структура каталогов:

.\Main.py
.\__pycache__\Module1.cpython-32.pyc

Когда я использую интерпретатор python для запуска основного скрипта, он не может найти модуль со следующей ошибкой:

Traceback (most recent call last):
  File "Main.py", line 10, in <module>
    import Module1
ImportError: No module named Module1

Обратите внимание, что я добавил текущий каталог в PYTHONPATH переменная окружения, и является частью sys.path, Кроме того, внутренний __pycache__ каталог также добавлен, и виден в sys.path,

Не уверен, почему Module1 не найден. Я предполагаю, что это может быть из-за другого имени файла - Module1.cpython-32.pyc? Но тогда именно так интерпретатор Python 3.2 генерирует его.

3 ответа

Решение

Посмотрите на PEP-3147. Они описывают, как работает механизм поиска Python.

Итак, в вашем конкретном случае: поместите файл Module1.pyc прямо в корневую папку.

Как указано ниже, два шага решили проблему: Шаг 1: Скопируйте файл Module.cpython-32.pyc из каталога.__pycache__ в.\ Шаг 2: Переименуйте файл в Module.pyc

PS: спасибо gecco за то, что поделились деталями.

Эта проблема может зависеть от того, какую версию Python вы используете, поскольку системы сборки/компиляции/упаковки менялись с годами.

Для python 3.9 я обнаружил, что эта команда работает:

      # recursively compile all modules
python -m compileall -b .

# run the compiled version of your `Main.py`
python Main.pyc

Объяснение

Основная проблема в том, что в последних версиях python/package_dir/my_module.pyкомпилируется в/package_dir/__pycache__/my_module.cpython-64.pyc(или какая-то вариация). Система обнаружения модулей видимо не заглядывает в__pycache__, в результатеmodule not foundошибка вmy_moduleзаявление об импорте. -bфлаг указывает компилятору записывать скомпилированные файлы в то же место, что и исходный код.pyфайлы, чтобы их можно было обнаружить.

Другие вопросы по тегам