Было бы хорошей идеей заставить Python хранить компилируемый код в файловом потоке вместо файлов pyc? - PullRequest
1 голос
/ 25 сентября 2010

Мне интересно, не будет ли лучше, если Python сохранит скомпилированный код в файловом потоке исходного исходного файла.Это будет работать в файловых системах, поддерживающих forks / data-streams, и отката, если это невозможно.

  • В Windows с использованием ADS (альтернативные потоки данных)
  • В OS Xиспользование разветвлений ресурсов
  • В Linux использование расширенных атрибутов файла, если скомпилированный файл меньше 32k

Это позволит решить проблему загрязнения исходного дерева или возникновения проблем, таких как удаление.py .pyc остался и был загружен и использован.

Что вы думаете об этом, звучит как хорошая идея или нет?Что делать, см.

Ответы [ 2 ]

1 голос
/ 25 сентября 2010

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

Так что это будет ужасноОшибка сделать поведение, которое вы хотите, по умолчанию - но было бы неплохо иметь его как параметр , доступный для конкретного запроса, если ваша среда развертывания не заботится обо всех вышеперечисленных проблемах и делаетзаботиться о некоторых из тех, кого вы упоминаете.Другой «крутой вариант», который я на самом деле использовал бы примерно в 100 раз чаще, - это помещать .pyc «файлы» в базу данных вместо того, чтобы иметь их в файловых системах.

Круто то, что это (относительно) легко сделать как «взломать импорт» тем или иным способом (в зависимости от версии Python) - наиболее легко в достаточно недавних версиях с importlib ,Шедевр Бретта Кэннона (но это может сделать бэкпорт к более старым версиям Python сложнее, чем другими способами ... слишком многое зависит от того, какие именно версии вам нужно поддерживать, подробности, которые я не вижу в вашем вопросе, поэтому я не буду переходитьв детали реализации, но общая идея не сильно меняется в зависимости от реализации).

1 голос
/ 25 сентября 2010

Одна проблема, которую я ожидаю, состоит в том, что тогда это означает, что каждая платформа имеет свое поведение.

Следующим является то, что не каждая файловая система, поддерживаемая OS X, также поддерживает вилки ресурсов (и способ, которым она хранит их в не-hfs).файловые системы повсеместно ненавидят все остальные: ._)

Сказав это, меня часто укусил файл .pyc, используемый apache, потому что процесс apache не может прочитать файл .py, который я заменил,Но я думаю, что это не решение: лучший процесс развертывания;)

...