python - 第一次 Homebrew 公式,不懂收集依赖和资源后的安装过程

标签 python homebrew

上下文(除非需要,否则跳过)

在上下文中,我是一个 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/

相关文章:

python - 我想读取制表符分隔文件的一列,在另一个文件中搜索匹配的条目,然后替换该术语

postgresql - 如何在 Mac OSX 上使用 Homebrew 安装的 Postgres 中的扩展

python - 通过 brew 的 Mac OSX pip3 问题

php - Homebrew 软件在 Mac High Sierra 上的哪里安装 PHP?

ruby - 很难在 Mac 上安装 Ruby

python - 让 HDF5 与 pyTables 一起工作的问题

python - 如何修改networkx中节点的轮廓颜色?

python - Python 的 ESB?

python - 为什么 open() 和 .read() 的语法不同?

python - QSplitter Handlebars