Первая формула homebrew, не понимает процесс установки после сбора зависимостей и ресурсов

Контекст (пропустить, если не требуется)

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

Единственный "Ruby", который я знаю, - это писать SCSS/Sass, поэтому я в основном просто копирую и вставляю свой путь к чему-то вроде успеха.

Проблема

В ореховой раковине я пытаюсь распространять проект, над которым я работал некоторое время через Homebrew. Он включает в себя:

  • В основном довольно большой модуль Python, который я написал
  • CLI на основе Python для взаимодействия с указанным модулем
  • некоторые файлы шаблонов, используемые CLI, при использовании модуля для создания вещей
  • несколько зависимостей Python
  • одна зависимость Python, не распространяемая PyPi, но доступная на GitHub
  • одна скомпилированная зависимость Python, которая распространяется третьим лицом и обычно с покупкой оборудования
  • sdl2
  • некоторые рамки, о которых вы никогда не слышали

Я понимаю:

  • Как указать зависящие зависимости
  • как включить мои зависимости Python в качестве ресурсов. Я написал очень простой setup.py для моего модуля, который я использовал около года, но все остальные биты, которые я устанавливал вручную.
  • Как установить некоторые базовые, канонические аспекты проекта (т.е. подключение CLI к /usr/local/bin

Я не понимаю:

  • как на самом деле установить что-либо в Cellar Как установить определенные коэффициенты и концы, не охватываемые фрагментами homebrew-talk Я зацепил от чтения формул
  • получить все эти биты, чтобы найти друг друга, когда они находятся в Подвале (я имею в виду, что я абстрактно понимаю, что это достигается с помощью символических ссылок и переменных $PATH, но конкретно это не в моей глубине - я сам -это веб-разработчик-повернутый программист для лаборатории-I-work-at)
  • где поместить CLI и его файлы шаблонов, и как настроить setup.py(если действительно setup.py - это то, где это должно быть сделано), чтобы ожидать их в своем заваренном месте

Стоит отметить, что моя лаборатория использует систему Python. Я не против того, чтобы это выполнялось в brew -установленной версии Python (действительно, я бы предпочел), но установка не может привести к тому, что система Python перестанет быть версией по умолчанию, используемой в командной строке, в основном потому, что предполагаемая пользовательская база (т.е. кодеры с очень низким уровнем профессионализма) будет паниковать и бежать, если их запомненные процедуры для выполнения своих программ потерпят неудачу, и я не могу гарантировать, что они не установили вещи в каталоге сайта-пакетов системы (извините).

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

Ниже приведена ссылка на репозиторий Git для ссылки на структуру каталогов проекта.

Мой script на сегодняшний день не очень большой, здесь, насколько я понял:

class Klibs < Formula
  desc ""
  homepage ""
  url "https://github.com/jmwmulle/klibs/archive/0.9.1.4.tar.gz"
  version "0.9.1.4"
  # sha256 is wrong; just been editing the local cache while I learn how to do this properly :S
  # (in case anyone tries to brew create the repository and notices)
  sha256 "d854b85fc6fae58a9f6d046c206a73ac8c5948e89740cd55c02450e1ba9af0e0"

  depends_on :python if MacOS.version <= :snow_leopard
  depends_on "sdl2"         => :required
  # bunch of other brewable dependencies

  resource "PySDL2" do
    url "https://pypi.python.org/packages/source/P/PySDL2/PySDL2-0.9.3.zip"
   sha1 "030f2351d1da387f878e14c8a86e08571d7baf5b"
  end  

  # ...bunch of other python modules

  resource "AggDraw" do  # note that this one not hosted by PyPi
    url "https://github.com/preo/aggdraw.git"
    sha1 "92e5e75aaaf5c535735d974764472e7e4d8e5cb0"
  end

  def install
      resource("PySDL2").stage { system "python", *Language::Python.setup_install_args(libexec/"vendor") }
      # and, again, more python modules
      cd "klibs" do
          ENV.prepend_create_path "PYTHONPATH", libexec/"lib/python2.7/site-packages"
          cd "lib/pylink" do
              cd "frameworks/eyelink" do
                  frameworks.install("eyelink_core_graphics.framework")
                  frameworks.install("eyelink_core.framework")
              end   
              # this next part I *know* must be wrong, I'm just not sure how to achieve 
              # this the homebrew way and thought I'd at least demonstrate what 
              # I need to do; this is a pre-compiled, third-party python module
              # that is not distributed by any other means  
              system "cp", "-r", "pylink", "#{libexec}/lib/python2.7/site-packages"
              system "ln", "-s", "#{libexec}/lib/python2.7/site-packages/pylink"
          end
          system "python", "setup.py", "install", "--prefix=#{prefix}"
      end
      bin.install("bin/klibs")
      lib.install("lib/klibs")
  end
  test do
    system "false"
  end
end

Ответы

Ответ 1

Ну, homebrew не лучший инструмент для упаковки и распространения кода (только для OSX). Вероятно, вы захотите посмотреть: http://python-packaging-user-guide.readthedocs.org/en/latest/distributing/. В зависимости от того, как вы пишете свой код; вы можете поставить свои требования непосредственно в свой setup.py, а не помещать их в рецепт доморощенного.

Что касается пакетов, которые вы используете, которые не относятся к PyPI; задайте себе следующие вопросы:

  • Имеет ли код, который я хочу использовать, надлежащую лицензию на программное обеспечение?
  • Можно ли открыть проблему в проектах github, чтобы владельцы разместили их на PyPI?

получение машин в соответствии с конкретной конфигурацией

Если вы управляете фермой машин:

  • chef, puppet, salt, ansible,...

Если вы только заботитесь о распределении:

  • setuptools + virtualenv + pip делает хорошую комбинацию.
  • pip может устанавливать требования от PyPI, github, файловых серверов,...