Как избежать .pyc файлов?

261
задан sepp2k 8 March 2019 в 10:57
поделиться

5 ответов

От "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 - Каталоги .

Репозитория PYC
283
ответ дан bignose 23 November 2019 в 02:36
поделиться

На самом деле СУЩЕСТВУЕТ способ сделать это в 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 быть сделанными без слишком большой проблемы).

, По моему опыту, производительность не страдает слишком много из-за этого, но необходимо думать дважды прежде, чем импортировать любые очень большие модули этот путь.

22
ответ дан Jason Baker 23 November 2019 в 02:36
поделиться

В 2,5, нет никакого способа подавить его кроме мер как не предоставление пользовательского доступа для записи к каталогу.

В python 2.6 и 3.0 однако, может быть установка в sys модуле, названном "dont_write_bytecode", который может быть установлен подавить это. Это может также быть установлено путем передачи "-B" опции или установки переменной среды "PYTHONDONTWRITEBYTECODE"

11
ответ дан Brian 23 November 2019 в 02:36
поделиться

Вы могли сделать каталоги, что Ваши модули существуют в только для чтения для пользователя, которого интерпретатор Python выполняет как.

я не думаю, что существует более изящная опция. PEP 304, кажется, был попыткой представить простую опцию для этого, но от этого, кажется, отказались.

я предполагаю, что существует, вероятно, некоторая другая проблема, которую Вы пытаетесь решить, для которого отключение .py [co], казалось бы, было бы обходным решением, но, вероятно, будет лучше приняться за решение независимо от того, что эта исходная проблема вместо этого.

1
ответ дан Logan 23 November 2019 в 02:36
поделиться

Насколько я знаю, что Python скомпилирует все модули, Вы "импортируете". Однако Python НЕ скомпилирует сценарий Python, выполненный с помощью: "Python script.py" (это однако скомпилирует любые модули, которые сценарий импортирует).

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

0
ответ дан Alex 23 November 2019 в 02:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: