【问题标题】:Ruby Require Statement and file locationsRuby Require 语句和文件位置
【发布时间】:2013-01-29 14:09:42
【问题描述】:

我正在尝试在 Ruby 中使用 require 命令。我正在使用 CodeRunner 运行我的代码。我遇到的问题是 require 语句只是使用字符串“chunky_png”。我有一个文件夹,里面装满了这段代码需要使用的库文件。我不确定 A)在哪里放置文件夹和 B)如果我需要以某种方式指向该文件夹?这是我的代码,下面是我得到的错误。我的库文件文件夹与我尝试运行的 PNGdecode.rb 文件位于同一文件夹中:

require 'chunky_png'

class ChunkyPNG::Image
  def at(x,y)
    ChunkyPNG::Color.to_grayscale_bytes(self[x,y]).first
  end
end

img = ChunkyPNG::Image.from_file('engine.png')

sobel_x = [[-1,0,1],
           [-2,0,2],
           [-1,0,1]]

sobel_y = [[-1,-2,-1],
           [0 , 0, 0],
           [1 , 2, 1]]

edge = ChunkyPNG::Image.new(img.width, img.height, ChunkyPNG::Color::TRANSPARENT)

for x in 1..img.width-2
  for y in 1..img.height-2
    pixel_x = (sobel_x[0][0] * img.at(x-1,y-1)) + (sobel_x[0][1] * img.at(x,y-1)) + (sobel_x[0][2] * img.at(x+1,y-1)) +
          (sobel_x[1][0] * img.at(x-1,y))   + (sobel_x[1][1] * img.at(x,y))   + (sobel_x[1][2] * img.at(x+1,y)) +
          (sobel_x[2][0] * img.at(x-1,y+1)) + (sobel_x[2][1] * img.at(x,y+1)) + (sobel_x[2][2] * img.at(x+1,y+1))

    pixel_y = (sobel_y[0][0] * img.at(x-1,y-1)) + (sobel_y[0][1] * img.at(x,y-1)) + (sobel_y[0][2] * img.at(x+1,y-1)) +
          (sobel_y[1][0] * img.at(x-1,y))   + (sobel_y[1][1] * img.at(x,y))   + (sobel_y[1][2] * img.at(x+1,y)) +
          (sobel_y[2][0] * img.at(x-1,y+1)) + (sobel_y[2][1] * img.at(x,y+1)) + (sobel_y[2][2] * img.at(x+1,y+1))

    val = Math.sqrt((pixel_x * pixel_x) + (pixel_y * pixel_y)).ceil
    edge[x,y] = ChunkyPNG::Color.grayscale(val)
  end
end
edge.save('engine_edge.png')

错误:

PNGdecode.rb:1:in `require': no such file to load -- chunky_png (LoadError)

【问题讨论】:

    标签: ruby require


    【解决方案1】:

    嗯,其实chunky_png是一个gem,也就是一个库package。您应该通过 RubyGems ruby​​ 打包系统安装它。

    首先,如果尚未安装RubyGems,请安装它。 (如果你可以输入gem命令并显示它的帮助,那么进入第二步)

    其次,使用命令安装这个gem

    gem install chunky_png
    

    这不仅会下载这个库,还会下载它的依赖项,以这样一种方式安装和配置它们,您可以从 any 目录执行require 'chunky_png',而无需携带所有库文件。

    这是在 Ruby 中安装外部库的常规方式。

    注意:如果您在 Ubuntu Linux 系统上并且想要在系统范围内安装 gem(适用于所有用户),您可能需要在后一个命令前面加上 sudo /em>

    注意 2:如果您最终想要分发需要 gems 的 Ruby 应用程序,您最好使用Bundler,这样其他人就可以自动安装您的所有依赖项,而无需解析错误消息并逐个手动安装所需的gem

    【讨论】:

    • NIA,非常感谢。我想出了安装部分,但现在我收到了这个错误:>/Users/mchristensen/Library/Developer/Xcode/DerivedData/PNGDecoder-aajzzwvmnydgadekuteewrxhjsfe/Build/Products/Debug/PNGDecoder.app/Contents/Resources/rb_main。 rb:14:in `
      ': no such file to load -- chunky_png (LoadError)
    猜你喜欢
    • 2011-07-08
    • 1970-01-01
    • 2019-11-06
    • 1970-01-01
    • 2014-07-07
    • 2020-06-30
    • 2010-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多