От "What’s, Новый в Python 2.6 - Изменения Интерпретатора" :
Python можно теперь препятствовать писать .pyc или .pyo файлы путем предоставления переключатель-B к интерпретатору Python, или путем установки переменная среды PYTHONDONTWRITEBYTECODE прежде, чем выполнить интерпретатор. Эта установка доступна программам Python как
sys.dont_write_bytecode
переменная, и код Python может изменить значение для изменения interpreter’s поведения.
Обновление 27.11.2010: Python 3.2 решает проблему создания помех исходным папкам с .pyc
, файлы путем представления специального предложения __pycache__
подпапка, видят Новые функции и возможности в Python 3.2 - Каталоги .
На самом деле СУЩЕСТВУЕТ способ сделать это в Python 2.3 +, но это немного тайно. Я не знаю, понимаете ли Вы это, но можно сделать следующее:
$ unzip -l /tmp/example.zip
Archive: /tmp/example.zip
Length Date Time Name
-------- ---- ---- ----
8467 11-26-02 22:30 jwzthreading.py
-------- -------
8467 1 file
$ ./python
Python 2.3 (#1, Aug 1 2003, 19:54:32)
>>> import sys
>>> sys.path.insert(0, '/tmp/example.zip') # Add .zip file to front of path
>>> import jwzthreading
>>> jwzthreading.__file__
'/tmp/example.zip/jwzthreading.py'
Согласно библиотека zipimport :
Любые файлы могут присутствовать в архиве ZIP, но только файлы .py и .py [co] доступны для импорта. Импорт ZIP динамических модулей (.pyd, .so) запрещен. Обратите внимание, что, если архив только содержит .py файлы, Python не попытается изменить архив путем добавления соответствующего .pyc или .pyo файла, означания, что, если архив ZIP не содержит .pyc файлы, импорт может быть довольно медленным.
Таким образом, все, что необходимо сделать, архивировать файлы, добавить zipfile к sys.path и затем импортировать их.
при создании этого для UNIX Вы могли бы также рассмотреть упаковку Вашего сценария с помощью этого рецепта: исполняемый файл zip Unix , но примечание, что Вам, возможно, придется настроить это, если Вы планируете использование stdin или чтение чего-нибудь от sys.args (это CAN быть сделанными без слишком большой проблемы).
, По моему опыту, производительность не страдает слишком много из-за этого, но необходимо думать дважды прежде, чем импортировать любые очень большие модули этот путь.
В 2,5, нет никакого способа подавить его кроме мер как не предоставление пользовательского доступа для записи к каталогу.
В python 2.6 и 3.0 однако, может быть установка в sys модуле, названном "dont_write_bytecode", который может быть установлен подавить это. Это может также быть установлено путем передачи "-B" опции или установки переменной среды "PYTHONDONTWRITEBYTECODE"
Вы могли сделать каталоги, что Ваши модули существуют в только для чтения для пользователя, которого интерпретатор Python выполняет как.
я не думаю, что существует более изящная опция. PEP 304, кажется, был попыткой представить простую опцию для этого, но от этого, кажется, отказались.
я предполагаю, что существует, вероятно, некоторая другая проблема, которую Вы пытаетесь решить, для которого отключение .py [co], казалось бы, было бы обходным решением, но, вероятно, будет лучше приняться за решение независимо от того, что эта исходная проблема вместо этого.
Насколько я знаю, что Python скомпилирует все модули, Вы "импортируете". Однако Python НЕ скомпилирует сценарий Python, выполненный с помощью: "Python script.py" (это однако скомпилирует любые модули, которые сценарий импортирует).
реальные вопросы состоят в том, почему Вы не хотите, чтобы Python скомпилировал модули? Вы могли, вероятно, автоматизировать способ очистить их, если они мешают.