Python 第一个自制配方,don';收集依赖项和资源后,无法理解安装过程 上下文(除非需要,否则跳过)

Python 第一个自制配方,don';收集依赖项和资源后,无法理解安装过程 上下文(除非需要,否则跳过),python,homebrew,Python,Homebrew,我是一个超级大块头,在这里,请友好点!我想写一个公式的项目是在认知心理学研究的背景下使用的;它可能不会仅仅因为用户群非常狭窄而看到非常广泛的分布;到目前为止,我只是在每个人的电脑上手动安装这个。但它最终得到了充分的利用,这不再可行 我所知道的唯一的“Ruby”是从编写SCS/Sass开始的,所以我主要是通过复制和粘贴我的方式获得成功 问题 简而言之,我正试图通过自制软件发布一个我已经工作了一段时间的项目。它包括: 主要是我编写的大型Python模块 用于与所述模块交互的基于Python的CLI

我是一个超级大块头,在这里,请友好点!我想写一个公式的项目是在认知心理学研究的背景下使用的;它可能不会仅仅因为用户群非常狭窄而看到非常广泛的分布;到目前为止,我只是在每个人的电脑上手动安装这个。但它最终得到了充分的利用,这不再可行

我所知道的唯一的“Ruby”是从编写SCS/Sass开始的,所以我主要是通过复制和粘贴我的方式获得成功

问题 简而言之,我正试图通过自制软件发布一个我已经工作了一段时间的项目。它包括:

  • 主要是我编写的大型Python模块
  • 用于与所述模块交互的基于Python的CLI
  • CLI在使用模块创建内容时使用的一些模板文件
  • 几个Python依赖项
  • 一个Python依赖项不是由PyPi分发的,但在GitHub上可用
  • 一个已编译的Python依赖项,由第三方分发,通常随硬件购买一起分发
  • sdl2
  • 一些你从未听说过的框架
我明白:

  • 如何指定可删除的依赖项
  • 如何将Python依赖项包含为资源。我已经为我的模块编写了一个非常简单的setup.py,我已经使用了大约一年,但是,所有其他的部分我都是手动安装的
  • 如何安装项目的某些基本规范方面(即将CLI链接到/usr/local/bin
我不明白:

  • 如何在地下室里安装任何东西如何安装一些没有被自制演讲片段覆盖的零碎东西我从阅读公式中学到了很多
  • 一旦它们进入地下室,就让它们找到彼此(我的意思是,我抽象地理解,这是通过符号链接和$PATH变量实现的,但具体地说,这超出了我的深度——我是一个自学成才的网络开发人员转为程序员,为实验室工作)
  • 放置CLI及其模板文件的位置,以及如何配置setup.py(如果确实应该在setup.py中执行此操作),以使它们位于其酝酿位置
值得注意的是,我的实验室使用的是系统Python。我不反对在brew安装的Python版本中运行该系统(事实上我更喜欢它),但是,安装不会导致系统Python不再是命令行中使用的默认版本,主要是因为预期的用户群(即熟练程度非常低的程序员)如果他们执行程序的记忆例程失败,我不能保证他们没有在system site packages目录中安装东西,他们会惊慌失措并逃跑(对不起)

如果有任何不清楚的地方,请向我提问,我很乐意澄清

指向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
Klibs类
好吧,
自制
并不是包装和分发代码(仅限OSX)的最佳媒介。 您可能想看看:。这取决于您编写代码的方式;您可以将您的代码放入自制配方中,而不是放入自制配方中

对于您正在使用的不在PyPI上的软件包,请自问以下问题:

  • 我要使用的代码是否具有适当的软件许可证
  • 我可以在github项目上打开一个问题,以便所有者将它们放在PyPI上吗
使计算机符合特定配置 如果您正在管理一个机器场:

  • chef
    puppet
    salt
    ansible
如果您只关心分发:

  • setuptools
    +
    virtualenv