Для чего нужны несколько выходных файлов из Cython?

Я на Python 2.7 и новичок в Cython.

Фон:

У меня в проекте более 20 файлов py, а затем я обнаружил, что медлительность исходит от 3 из них.

Поэтому я использую Cython для этих файлов, теперь они скомпилированы с помощью Cython и без проблем становятся файлами pyd. (Я потратил дни, чтобы исследовать проблему, искать лучшее решение, улучшать способ кодирования на Python, но мне все еще приходится использовать Cython из соображений производительности)

Кроме файла pyd, в папке сборки есть еще несколько файлов с тем же именем, но с другим расширением, а именно «.c», «.exp», «.lib», «.obj» и «.pyd.manifest». "

Похоже, что проект все еще работает, и производительность остается на уровне Cython, даже если я удалил эти файлы (.c, ".exp", ".lib", ".obj" и ".pyd.manifest"). запутался с этими выходными файлами компилятора, не уверен, что нужно, а что нет, и как мне их использовать и как с ними обращаться.

Мой setup.py:

from distutils.core import setup
from Cython.Build import cythonize

setup(
    ext_modules=cythonize("myCythonFile.pyx",)
)

person mcsy    schedule 19.06.2018    source источник
comment
Это объясняется в документации Cython, но все это промежуточные файлы, созданные компиляторами Cython и C. Если вы избавитесь от них, модуль все равно будет работать, но пересборка может занять больше времени, если вы что-то измените, и у вас может не быть доступной информации об отладке уровня C, если вам нужно что-то отлаживать, и вы не сможете для создания любых других модулей, которым необходимо использовать общий код с этим. Если вас ничего из этого не волнует, это не проблема. Если вы хотите лучше понять, вам нужно прочитать документы, а затем задать более конкретный вопрос о тех частях, которые вы не получили.   -  person abarnert    schedule 19.06.2018
comment
Между тем, ваш второй вопрос - это совсем другой вопрос, так что задавайте его отдельно.   -  person abarnert    schedule 19.06.2018
comment
Спасибо, я удалил второй вопрос, чтобы было ясно   -  person mcsy    schedule 19.06.2018
comment
Обычно я развертываю файлы pyc только после UAT. Что касается ваших отладочных вещей, если я хочу сохранить такой же уровень трассировки, должен ли я также развернуть файлы в build/tmp.win32-2.7/Release?   -  person mcsy    schedule 19.06.2018
comment
Если да, то как мне выполнить развертывание с точки зрения иерархии этих каталогов?   -  person mcsy    schedule 19.06.2018
comment
Вы развертываете вещи вручную? Обычно это не очень хорошая идея. Гораздо лучше использовать setuptools для создания колеса или инструменты virtualenv для создания переносимой среды и т. д. Вам не нужно копировать вещи в каталог Release.   -  person abarnert    schedule 19.06.2018


Ответы (1)


Все эти файлы являются временными файлами.

Cython компилирует каждый из ваших pyx файлов (у вас есть только один) в код C в соответствующих .c файлах. Он также может создавать другие файлы, такие как файл HTML, чтобы сделать код C более читабельным, но по умолчанию это все, что он вам дает, и вы не просите ничего дополнительно.

Затем Cython запрашивает любой компилятор C, который вы настроили через distutils — в вашем случае это MSVC (Microsoft Visual C++, компилятор C и C++, поставляемый с Visual Studio) — и создает файл .dll/.pyd из этих файлов .c. Полная информация о том, какие файлы создаются и что они означают, зависит от версии вашего компилятора, но в основном он создает файл .obj для каждого файла .c, затем библиотеку импорта .lib и библиотеку экспорта .exp для вашего .dll, и файл .manifest, который позволяет загрузить библиотеку в виде сборки.

Некоторые из этих файлов, в частности файлы .c и .obj, очень удобны для отладки, если в скомпилированном коде что-то пойдет не так. (Сгенерированный Cython код C может быть довольно уродливым для трассировки, но необработанный машинный код может быть еще хуже.)

Все эти файлы могут помочь сделать перестроение после незначительных изменений быстрее.

Некоторые из этих файлов также необходимы, если вы хотите делать более сложные вещи, такие как связывание других библиотек с вашей библиотекой.

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

person abarnert    schedule 19.06.2018
comment
Спасибо большое, теперь я намного лучше понимаю! - person mcsy; 21.06.2018