问题 如何确定默认的Ruby LOAD_PATH?


假设我编译自己的新Ruby(MRI 1.9.3),默认的LOAD_PATH是什么,以及如何计算?


11683
2018-05-31 16:52


起源



答案:


在我的机器上,初始加载路径如下所示:

$ ruby -e 'puts $LOAD_PATH'
/Users/matt/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/site_ruby/1.9.1
/Users/matt/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/site_ruby/1.9.1/x86_64-darwin10.8.0
/Users/matt/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/site_ruby
/Users/matt/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/vendor_ruby/1.9.1
/Users/matt/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/vendor_ruby/1.9.1/x86_64-darwin10.8.0
/Users/matt/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/vendor_ruby
/Users/matt/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1
/Users/matt/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/x86_64-darwin10.8.0

武装 grep,对Ruby源的调查导致了 的定义 ruby_initial_load_paths[] 在 version.c (这是在Ruby 1.9.3上)。第一个适用(两个都没有 NO_INITIAL_LOAD_PATH 要么 RUBY_SEARCH_PATH 已经设定)是 RUBY_SITE_LIB2。查看上面定义的定义 我们看

#define RUBY_SITE_LIB2              RUBY_SITE_LIB    "/"RUBY_LIB_VERSION

反过来

#define RUBY_SITE_LIB RUBY_LIB_PREFIX"/site_ruby"

在这个定义链之后,很明显这对应于我上面的加载路径中的第一个条目。类似地,进入此变量的其他常量对应于其他加载路径条目。

ruby_initial_load_paths[] 变量用于 ruby_init_loadpath_safe() 在 ruby.c,为过程设置实际负载路径。

所以你的问题的答案是初始加载路径是在编译时设置的 #defines,根据构建的配置方式。


14
2018-05-31 21:55





您的编译创建一个lib目录 基于* nix的系统通常是

/usr/lib/ruby/X.Y.Z

X.Y.Z表示ruby C api版本的版本号。


0
2018-05-31 16:56



不,它没有,那里的版本号代表Ruby C API版本 - Andrew Marshall


答案:


在我的机器上,初始加载路径如下所示:

$ ruby -e 'puts $LOAD_PATH'
/Users/matt/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/site_ruby/1.9.1
/Users/matt/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/site_ruby/1.9.1/x86_64-darwin10.8.0
/Users/matt/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/site_ruby
/Users/matt/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/vendor_ruby/1.9.1
/Users/matt/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/vendor_ruby/1.9.1/x86_64-darwin10.8.0
/Users/matt/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/vendor_ruby
/Users/matt/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1
/Users/matt/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/x86_64-darwin10.8.0

武装 grep,对Ruby源的调查导致了 的定义 ruby_initial_load_paths[] 在 version.c (这是在Ruby 1.9.3上)。第一个适用(两个都没有 NO_INITIAL_LOAD_PATH 要么 RUBY_SEARCH_PATH 已经设定)是 RUBY_SITE_LIB2。查看上面定义的定义 我们看

#define RUBY_SITE_LIB2              RUBY_SITE_LIB    "/"RUBY_LIB_VERSION

反过来

#define RUBY_SITE_LIB RUBY_LIB_PREFIX"/site_ruby"

在这个定义链之后,很明显这对应于我上面的加载路径中的第一个条目。类似地,进入此变量的其他常量对应于其他加载路径条目。

ruby_initial_load_paths[] 变量用于 ruby_init_loadpath_safe() 在 ruby.c,为过程设置实际负载路径。

所以你的问题的答案是初始加载路径是在编译时设置的 #defines,根据构建的配置方式。


14
2018-05-31 21:55





您的编译创建一个lib目录 基于* nix的系统通常是

/usr/lib/ruby/X.Y.Z

X.Y.Z表示ruby C api版本的版本号。


0
2018-05-31 16:56



不,它没有,那里的版本号代表Ruby C API版本 - Andrew Marshall