Пакетный инструмент Python в приложении Какао с easy_install - PullRequest
3 голосов
/ 14 января 2012

Моему приложению Cocoa требуется, чтобы в системе пользователя был установлен инструмент командной строки Python с помощью easy_install. В идеале, я бы хотел связать один bash-файл с моим приложением, которое затем смогу запустить. Но, насколько я знаю, это невозможно, потому что пакеты устанавливаются в каталог "site-packages" Python.

Есть ли способ создать «пакет» из этих файлов? Если нет, то как мне запустить установку easy_install? Я хотел связать файл .pkg с моим приложением, которое я могу затем открыть при необходимости, но я не смог позволить этому установочному пакету запускать только скрипт.

Если у вас есть идеи, как это исправить, я был бы рад.

С уважением, Fabian

Ответы [ 2 ]

4 голосов
/ 14 января 2012

Если вы можете поставлять инструмент командной строки вместе с вашим приложением, и если только ваше приложение будет использовать его (вместо инструмента, используемого непосредственно пользователем), вы можете напрямую включить и использовать инструмент командной строки с вашим приложениемнапример:

  • Храните инструмент командной строки где-нибудь в каталоге вашего приложения.
  • Установите путь поиска модуля Python так, чтобы он искал нужный вам модуль.

Задание пути поиска модуля Python относительно программы на Python можно сделать с помощью

import sys
import os.path as path

sys.path.append(path.join(path.dirname(__file__),
    '<relative path between this program and the command line tool module>'))

import <command line tool module>

Относительный путь можно записать с помощью .. соглашения о родительском каталоге: thisработает как в Unix (включая Mac OS X), так и в Windows.

PS : если многим программам требуется доступ к инструментальному модулю командной строки, вы можете:

  • Либо поместите приведенный выше код в каждую из ваших программ,

  • или, если вы хотите что-то более простое в обслуживании, вы можете создать свой собственный модуль my_runner и использовать его какпрокси: ваш модуль my_runner будет импортировать все оригинальные функции runner следующим образом:

    import sys
    import os.path as path
    
    sys.path.append(path.join(path.dirname(__file__),
        '<relative path between this program and the original ino module>'))
    
    from ino.runner import *
    

    Затем вы можете использовать оригинальный модуль бегуна во всех своих программах через прокси,просто выполняя «обычный» импорт вашего собственного my_runner модуля:

    from my_runner import main
    

PPS : если вы хотите более надежныйПуть, который работает, даже если рабочий каталог впоследствии изменяется, возможно преобразовать потенциально локальный путь в абсолютный путь с помощью: path.join(path.abspath(path.dirname(__file__)),….

2 голосов
/ 14 января 2012

Благодаря EOL у меня все получилось.Решение включало несколько шагов, перечисленных ниже.

  1. Удалите зависимости, упаковав файлы .egg и ссылаясь на них следующим образом:

    import sys
    import os.path as path
    sys.path.append(path.join(path.dirname(__file__), '<relative path to .egg file>'))
    
    from dependency import something
    
  2. Создайте один файл .egg из теперь независимого модуля Python, используя setup.py

  3. Ссылка на полученный файл .egg в инструменте командной строки, как в 1.
  4. Bundleодин файл .egg и инструмент командной строки в приложении Какао

Надеюсь, это кому-нибудь пригодится.

...