Из домашней папки .pyc файлы? - PullRequest
3 голосов
/ 15 февраля 2012

Если я помещу свой проект в / usr / bin /

, будет ли мой интерпретатор python генерировать байт-код?Если это так, куда он помещает их, поскольку файлы не имеют разрешения на запись в эту папку.Кеширует ли он их во временном файле?

Если нет, то я теряю производительность при размещении проекта там?

Я упаковал его как файл .deb, который устанавливается измой Ubuntu ppa, поэтому очевидное место для установки проекта находится в / usr / bin /

, но если я не сгенерирую байт-код, поместив его туда, что мне делать?Могу ли я дать проекту разрешение на запись, если он будет установлен на компьютере другого человека?Это может показаться угрозой безопасности.

В Ubuntu (и, очевидно, в других дистрибутивах) наверняка установлено много проектов на python. Как они справляются с этим?

Спасибо

Ответы [ 2 ]

1 голос
/ 15 февраля 2012

.pyc / .pyo файлы не создаются для сценариев, которые запускаются напрямую.Модули Python, размещенные там, где модули Python обычно ожидаются и упакованы, содержат файлы .pyc / .pyo, созданные во время сборки или во время установки, и поэтому не являются проблемой конечного пользователя.

1 голос
/ 15 февраля 2012

Что касается скрипта в /usr/bin, если вы выполняете свой скрипт как пользователь, у которого нет прав на запись в /usr/bin, то файлы .pyc не будут созданы, и, насколько я знаю,, нет никакого другого механизма кэширования.

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

Я видел обычную практику в Ubuntu - использовать smallскрипты в /usr/bin даже без расширения .py.Эти скрипты очень быстро компилируются, поэтому вам не нужно об этом беспокоиться.Они просто импортируют библиотеку и вызывают какой-то метод library.main.Application().run(), и все.

Обратите внимание, что библиотека установлена ​​по другому пути и что все библиотечные файлы скомпилированы для разных версий Python.Если это не так в вашей посылке, то вам нужно просмотреть файлы setup.py и debian, поскольку это не так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...