Любые методы развертывания пакетов Python с помощью 'pip | easyinstall '+' * .pyc only '+' пакеты с плоским пространством имен '+ virtualenv?

Цели:

  • Используйте современные наборы инструментов для упаковки Python для развертывания / установки проприетарных пакетов в некоторые файлы virtualenv.
  • Установленные пакеты должны включать скомпилированные * .pyc (или * .pyo) только без исходных файлов.
  • Есть несколько пакетов, и в качестве имен пакетов используется имя поставщика (здесь мы выбираем dgmx для нашей студии). Следовательно, установленные пакеты будут выглядеть примерно так: dgmx / alucard, dgmx / banshee, dgmx / carmilla, ...
  • Иерархия файлов установленных пакетов должна быть похожей на python setup.py install --single-version-externally-managed или pip install. Обратитесь к Почему я не могу получить точный результат * pip install * вручную * python setup.py install *?

Вкратце вопрос:

Мне нравится развертывать проприетарные пакеты с пространством имен в virtualenv, используя только скомпилированные файлы * .pyc (или * .pyo), в которых иерархия файлов / каталогов просто отражает пространство имен с загрязнением sys.path множеством ooxx.egg пути.

Что-то я пробовал:

  1. python setup.py bdist_egg --exclude-source-files then easy_install ooxx.egg.
    • pollute "sys.path" for each namespace package.
  2. python setup.py install --single-version-externally-managed.
    • not *.pyc only.
    • "install_requires" проигнорирован!
    • необходимо вручную поместить ooxx.egg-info / installed-files.txt, чтобы uninstall работал правильно.
  3. pip install . in the location of "setup.py".
    • not *.pyc only.
  4. pysetup install . in the location of "setup.py".
    • not *.pyc only.

Обновление:

Моя текущая идея - следовать методу 2.

  • python setup.py egg_info --egg-base . # get requires.txt
  • python setup.py install --single-version-externally-managed --record installed-files.txt # получить install-files.txt
  • вручную установить другие зависимости через "requires.txt"
  • вручную удалить установленные исходные файлы (* .py) через "installed-files.txt"
  • удалите исходные файлы (* .py) из "installed-files.txt" и поместите его в развернутый "ooxx.egg-info / installed-files.txt"

Использованная литература:

  1. Переход на pip + virtualenv из инструментов настройки
  2. установка только .pyc (скомпилированный python) с помощью инструментов настройки
  3. Могу ли я развертывать файлы Python .pyc только в Google App Engine?
  4. Почему я не могу получить точный результат для * pip install * вручную * python setup.py install *?

person Drake Guan    schedule 17.04.2012    source источник
comment
К вашему сведению, pyc на самом деле не являются скомпилированными двоичными файлами и могут быть легко реконструированы, например используя модуль dis. Я бы посоветовал взглянуть на файлы pyd (которые в основном представляют собой библиотеки DLL), но я не уверен, как их можно создать из кода Python.   -  person aquavitae    schedule 17.04.2012
comment
Я знаю, но это проблема политики, а не серьезная техническая проблема.   -  person Drake Guan    schedule 17.04.2012
comment
@Drake: вы, вероятно, захотите .pyo файлы вместо .pyc.   -  person vartec    schedule 17.04.2012
comment
@vartec ты прав. .pyo намного лучше, чем ~   -  person Drake Guan    schedule 17.04.2012


Ответы (1)


Может помочь какой-нибудь трюк:

Скомпилируйте исходный код в .pyc, заархивируйте их в один .zip файл.

Напишите новый модуль с помощью простого модуля, все, что он делает, - это добавление .zip к sys.path.

Поэтому, когда вы импортируете этот модуль, .zip находится в пути. Все, что вам нужно сделать, это на настраиваемом шаге в setup.py скопировать zip-файл в нужное место.

person BOYPT    schedule 17.04.2012
comment
В случае Python называется egg, и он уже упоминал об этом в вопросе (первый вариант, который он пробовал). - person vartec; 17.04.2012