2010-09-25 3 views
1

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

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

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

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

ответ

1

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

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

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

+0

Спасибо, Алекс, ваша идея намного лучше, кеширование скомпилированных файлов в локальной базе данных/кеше намного лучше. – sorin

1

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

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

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

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

  • Нет связанных вопросов^_^