2014-02-10 6 views
3

Я заметил, что модули/пакеты Python имеют два типа. Некоторые из них являются просто чистыми сценариями Python и могут быть просто скопированы и вставлены в каталог Python. Другие, однако, требуют, и я думаю, что это обычно обертки для или на основе кода C/C++, что код «построен» и/или «скомпилирован» с помощью setup.py для создания набора новых файлов.Почему некоторые модули Python должны быть «скомпилированы»?

Мои вопросы касаются второго типа модуля/пакета. Почему они должны быть скомпилированы, есть ли для этого конкретная причина? Не мог ли дистрибьютор предоставить все файлы с самого начала?

Причина, по которой я прошу, состоит в том, что я хочу распространять такие пакеты на основе C++ как часть своих собственных пакетов, так что пользователю не нужно беспокоиться об установке зависимостей самостоятельно и не беспокоиться о компиляции, и т. д. Я всегда задавался вопросом, почему дистрибьюторы модулей не просто включают зависимости, а не спрашивают у пользователя, чтобы они сами устанавливали их.

Я подозреваю, что ответ может быть bc, что дополнительные файлы должны быть записаны определенным образом в зависимости от того, какой тип ОС находится на компьютере, и является ли это 32 или 64 бит. Может ли это означать, что распространение скомпилированных файлов будет работать, но только если у пользователя есть такая же конкретная ОС и битовая система, как и тот, где были скомпилированы файлы.

В любом случае, интересно узнать ответ.

+0

Многие пакеты предоставляют двоичные дистрибутивы, поэтому ответ «да, дистрибьютор может просто предоставить все файлы». – geoffspear

+0

Я предполагаю, что вы все уже догадались правильно ;-) Конечно, там также есть пакеты, содержащие предварительно скомпилированные двоичные файлы, которые затем будут работать только в архитектуре, для которой они были предварительно скомпилированы. – Alfe

+1

Не знаете, что здесь скомпилировано? Вы имеете в виду, что некоторые модули python могут быть установлены с помощью 'pip install package' или' python setup.py install' вместо того, чтобы просто предоставить кучу файлов? – msvalkon

ответ

1

Почему пакеты просто не включают зависимости: Лицензия. Вы не можете просто добавить чужой код, скомпилированный или нет, не спрашивая человека/компанию или даже оплатить пошлину.

В Python эти встроенные модули, о которых вы говорите, являются расширениями Python. Обычно они работают для повышения производительности или доступа к низкоуровневым функциям, которых нет в Python. Иногда также включать проприетарную функциональность.

+1

Или просто получить доступ к материалам низкого уровня, к которым вы не можете получить доступ через чистый-питон и его стандартную библиотеку, которые нуждаются в * не * быть «фирменной функциональностью». – Bakuriu

+0

@Bakuriu: хороший момент о низкоуровневых материалах. Я обновил ответ. – geertjanvdk

+0

@geertjanvdk, ​​возможно, я должен был указать. Я знаю о лимитах лицензирования, но я говорю об открытом исходном коде, лицензии которого позволяют делиться и распространять. Хороший совет о причине добавления низкоуровневой функциональности. –

Смежные вопросы