Могу ли я запустить интерпретатор python без генерации скомпилированных файлов .pyc?
268
Из раздела «Что нового в Python 2.6 - Изменения интерпретатора» :
Теперь Python можно запретить записывать файлы .pyc или .pyo, указав ключ -B для интерпретатора Python или установив переменную среды PYTHONDONTWRITEBYTECODE перед запуском интерпретатора. Этот параметр доступен для программ Python как
sys.dont_write_bytecode
переменная, и код Python может изменить значение, чтобы изменить поведение интерпретатора.
Обновление 2010-11-27: Python 3.2 решает проблему загромождения исходных папок .pyc
файлами путем введения специальной __pycache__
подпапки, см. Что нового в Python 3.2 - Каталоги репозитория PYC .
export PYTHONDONTWRITEBYTECODE=1
источник
site-packages/usercustomize.py
чтобы применить это ко всем вашим сценариям. Для меня этот каталог был$HOME/.local/lib/python2.6/site-pacakges/usercustomize.py
. Ср docs.python.org/2/tutorial/...import sys; sys.dont_write_bytecode = True
На самом деле есть способ сделать это в Python 2.3+, но это немного эзотерично. Я не знаю, понимаете ли вы это, но вы можете сделать следующее:
По данным библиотеки zipimport :
Таким образом, все, что вам нужно сделать, это заархивировать файлы, добавить zip-файл в ваш sys.path и затем импортировать их.
Если вы создаете это для UNIX, вы можете также рассмотреть возможность упаковки вашего скрипта с использованием этого рецепта: исполняемый файл zix unix , но учтите, что вам, возможно, придется настроить его, если вы планируете использовать stdin или читать что-либо из sys.args (это МОЖЕТ быть сделано без особых проблем).
По моему опыту, производительность не сильно страдает из-за этого, но вы должны дважды подумать, прежде чем импортировать очень большие модули таким образом.
источник
В 2.5 нет никакого способа подавить его, кроме таких мер, как не предоставление пользователям доступа для записи в каталог.
Однако в python 2.6 и 3.0 в модуле sys может быть параметр dont_write_bytecode, который можно установить для подавления этого. Это также можно установить, передав параметр «-B» или установив переменную среды «PYTHONDONTWRITEBYTECODE».
источник
Вы можете установить
sys.dont_write_bytecode = True
в своем источнике, но это должно быть в первом загруженном файле Python. Если вы выполните,python somefile.py
то вы не получитеsomefile.pyc
.Когда вы устанавливаете утилиту с помощью,
setup.py
иentry_points=
вы будете устанавливатьsys.dont_write_bytecode
в сценарии запуска. Таким образом, вы не можете полагаться на сценарий запуска по умолчанию, сгенерированный setuptools.Если вы запускаете Python с файлом python в качестве аргумента самостоятельно, вы можете указать
-B
:somefile.pyc
в любом случае не будет сгенерирован, но.pyc
файлы для других файлов тоже не будут импортированы.Если у вас есть какая-то утилита
myutil
и вы не можете ее изменить, она не передаст -B интерпретатору python. Просто запустите его, установив переменную окруженияPYTHONDONTWRITEBYTECODE
:источник
У меня есть несколько тестов в тестовом наборе, и до того, как я запустил тестовый набор в Mac Terminal, вот так:
При выполнении команды таким образом мой каталог заполнялся файлами .pyc. Я попробовал описанный ниже метод, и он решил проблему:
Этот метод работает, если вы импортируете тестовые наборы в набор тестов и запускаете набор в командной строке.
источник
Начиная с Python 3.8, вы можете использовать переменную окружения,
PYTHONPYCACHEPREFIX
чтобы определить каталог кэша для Python.Из документов Python:
пример
Если вы добавите следующую строку
./profile
в Linux:Python не будет создавать надоедливые
__pycache__
каталоги в каталоге вашего проекта, вместо этого он поместит их все под~/.cache/cpython/
источник
Вы можете создать каталоги, в которых ваши модули существуют, только для чтения для пользователя, от имени которого работает интерпретатор Python.
Я не думаю, что есть более элегантный вариант. PEP 304, по- видимому, был попыткой ввести простую опцию для этого, но, похоже, от него отказались.
Я полагаю, что, вероятно, есть еще одна проблема, которую вы пытаетесь решить, для которой отключение .py [co] может показаться обходным решением, но, вероятно, будет лучше атаковать любую исходную проблему.
источник
Решение для
ipython 6.2.1 using python 3.5.2
(протестировано на Ubuntu 16.04 и Windows 10):Ipython
не уважает,%env PYTHONDONTWRITEBYTECODE =1
если установлен вipython
интерпретаторе или во время запуска в~/.ipython/profile-default/startup/00-startup.ipy
. Вместо этого используйте следующее в вашем~.ipython/profile-default/startup/00-startup.py
источник
Насколько я знаю, Python скомпилирует все модули, которые вы "импортируете". Однако python НЕ будет компилировать скрипт python, запущенный с использованием: "python script.py" (однако он скомпилирует все модули, которые импортирует скрипт).
Реальный вопрос в том, почему вы не хотите, чтобы python компилировал модули? Вы могли бы, вероятно, автоматизировать способ очистки, если они мешают.
источник
.pyc
файлы байт-кода . По какой-то причине, когда я меняю класс / модуль,.pyc
файл не обновляется. Поэтому, когда я импортирую его после изменения.py
файла, он все равно будет использовать.pyc
файл, что приведет к ошибкам