colorific 是一个命令行实用程序。它似乎没有提供要导入的 API。我不会在这里使用 Ruby 到 Python 的桥接器,只需使用 Python 子进程模块的 Ruby 等效项运行该工具;作为一个单独的过程。(马丁·彼得斯)
colorific 测试套件本身导入 colorific,并且有一个名为 setup.py 的文件,因此 colorific 看起来像一个标准的 python 模块分发。
test = RubyPython.import("#{Rails.root}/lib/colorific/setup.py")
python 模块分发中的 setup.py 文件用于将模块安装在文件系统中的特定位置。通常,您会像这样安装 python 模块:
$ python setup.py install
然后你将文件导入到 python 程序中,如下所示:
import colorific
或者,如果您有一个模块名称作为字符串,您可以像这样进行导入:
import importlib
importlib.import_module('colorific')
但是,python 在特定目录中查找您导入的模块。python 搜索您导入的模块的目录列表由 sys.path 给出:
import sys
print sys.path
sys.path 是一个python列表,可以修改。
我建议您首先在某个目录中构建 colorific 模块:在某处创建一个空的 colorific 目录,例如 /Users/YourUserName/colorific,然后 cd 进入包含 setup.py 的目录并执行以下操作:
$ python setup.py install --home=/Users/YourUserName/colorific
安装后,将 colorific 目录移动到您的 rails 应用程序的某个位置,例如 /your_app/lib。
然后在 RubyPython 中执行以下操作:
RubyPython.start # start the Python interpreter
sys = RubyPython.import("sys")
sys.path.append("#{Rails.root}/lib")
colorific = RubyPython.import('colorific')
RubyPython.stop
您可能还想打印出 sys.path 以查看 rubypython gem 的设置位置以查找模块。
====
当我尝试时:
$ python setup.py install --home=/Users/YourUserName/colorific
我得到了错误:
error: bad install directory or PYTHONPATH
所以我只是安装了 colorific,就像我通常安装一个 python 模块一样:
$ python setup.py install
它将模块安装在系统相关的默认目录中,在 Mac 上是:
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages
其他系统见这里:
http://docs.python.org/2/install/#how-installation-works
colorific 安装在站点包中创建了一个目录,名为:
colorific-0.2.1-py2.7.egg/
我将该目录移动到我的应用程序的 lib 目录中:
$ mv /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/colorific-0.2.1-py2.7.egg /Users/7stud/rails_projects/my_app/lib
然后我使用以下代码导入模块,并在 colorific 中调用一个函数:
RubyPython.start # start the Python interpreter
logger.debug "hello " + "world"
sys = RubyPython.import('sys')
logger.debug sys.path
sys.path.append("#{Rails.root}/lib/colorific-0.2.1-py2.7.egg/")
colorific = RubyPython.import('colorific')
logger.debug colorific.hex_to_rgb("#ffffff")
RubyPython.stop
我把那个代码放在一个动作中。这是 log/development.log 中的输出:
hello world
[<Lots of paths here>, '/Users/7stud/rails_projects/test_postgres/lib/colorific-0.2.1-py2.7.egg/']
(255, 255, 255)
我发现RubyPython经常崩溃$ rails server
(WEBrick):
/Users/7stud/.rvm/gems/ruby-2.0.0-p247@railstutorial_rails_4_0/gems/rubypython-0.6.3/lib/rubypython.rb:106: [BUG] Segmentation fault
ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-darwin10.8.0]
-- Crash Report log information --------------------------------------------
See Crash Report log file under the one of following:
* ~/Library/Logs/CrashReporter
* /Library/Logs/CrashReporter
* ~/Library/Logs/DiagnosticReports
* /Library/Logs/DiagnosticReports
the more detail of.
<1000+ lines of traceback omitted>
即使我可以这样写:
logger.debug "hello " + "world"
这不起作用:
logger.debug "******" + colorific.hex_to_rgb("#ffffff")
也不是这个:
logger.debug "*********" + colorific.hex_to_rgb("#ffffff").rubify
与任何 ruby 的典型情况一样,RubyPython 的文档非常糟糕。但是,在这种情况下,他们在 python colorific 文档中找到了相同的匹配项。