Первая формула 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, файловых серверов,...