上下文(除非需要,否则跳过)
在上下文中,我是一个 super 小子,所以请保持友善!我要为其编写公式的项目用于认知心理学研究;它可能不会仅仅因为用户群非常狭窄而看到非常广泛的分布;到目前为止,我一直在忙于在每个人的计算机上手动安装它。但它最终得到充分利用,这不再可行。
我所知道的唯一“Ruby”是通过编写 SCSS/Sass,所以我主要只是复制和粘贴我的成功之路。
问题
简而言之,我正在尝试通过 Homebrew 分发我已经研究了一段时间的项目。它包括:
- 主要是我编写的大型 Python 模块
- 用于与所述模块交互的基于 Python 的 CLI
- CLI 在使用模块创建东西时使用的一些模板文件
- 几个 Python 依赖项
- 一个 Python 依赖项不是由 PyPi 分发但在 GitHub 上可用
- 一个已编译 Python 依赖项,该依赖项是第 3 方分发的,通常随硬件购买
- sdl2
- 一些你从未听说过的框架
我明白了:
- 如何指定 brewable 依赖项
- 如何将我的 Python 依赖项作为资源包含在内。我已经为我的模块编写了一个非常简单的 setup.py,我已经使用了大约一年,但是,我一直在手动安装所有其他位。
- 如何安装项目的某些基本规范方面(即,将 CLI 链接到/usr/local/bin
我不明白:
如何在 Cellar 中实际安装任何东西如何安装我从阅读公式中学到的 Homebrew 软件片段未涵盖的某些零碎内容- 让所有这些位在 Cellar 中找到彼此(我的意思是我抽象地理解这是通过符号链接(symbolic link)和 $PATH 变量实现的,但具体来说,这超出了我的理解范围——我是一个 self - 教授 web 开发人员转为实验室程序员)
- 放置 CLI 及其模板文件的位置,以及如何配置 setup.py(如果 setup.py 确实应该在此处完成)以期望它们位于其 brew 位置
值得注意的是,我的实验室使用系统Python。我不反对在 brew-installed 版本的 Python 中运行(事实上我更喜欢它),但是,安装不会导致系统 Python 停止成为所使用的默认版本在命令行,主要是因为预期的用户群(即熟练程度很低的编码人员)如果他们内存的执行程序的例程失败,将会 panic 和逃离,我不能保证他们没有在系统站点中安装东西-包目录(抱歉)。
如果有任何不清楚的地方,请务必向我提问,我很乐意澄清。
Here's指向 Git 存储库的链接,用于引用项目的目录结构。
到目前为止,我的脚本还不是很大,这是我目前为止得到的:
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's 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
最佳答案
嗯,homebrew
并不是打包和分发代码的最佳媒介(仅限 OSX)。
你可能想看看:http://python-packaging-user-guide.readthedocs.org/en/latest/distributing/ .取决于您编写代码的方式;你可以把你的 requirements directly in your setup.py
而不是将它们放入 Homebrew 食谱中。
至于你正在使用的包不在 PyPI 上;问自己以下问题:
- 我要使用的代码是否有适当的软件许可?
- 我可以在 github 项目上提出问题以便所有者将它们放到 PyPI 上吗?
让机器符合特定的配置
如果您正在管理一个机器农场:
chef
,puppet
,salt
,ansible
, ...
如果你只关心分布:
setuptools
+virtualenv
+pip
是一个很好的组合。pip
能够安装来自 PyPI、github、文件服务器...的需求
关于python - 第一次 Homebrew 公式,不懂收集依赖和资源后的安装过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34164408/