0

我非常了解 ruby​​,但我以前从未使用过 python。

有一个很棒的python 脚本叫做 colorific。我已经在我的 rails 应用程序的 lib 文件夹中检查了这个脚本并安装了 ruby​​python gem。

我想知道我现在如何将此 sciprt 导入应用程序,到目前为止我已经得到了这个:

RubyPython.start # start the Python interpreter
test = RubyPython.import("#{Rails.root}/lib/colorific/setup.py")
RubyPython.stop # stop the Python interpreter

但是它抛出了错误......</p>

RubyPython::PythonError: ImportError: Import by filename is not supported.

我想知道如何导入这个脚本并开始使用它的方法?

4

3 回答 3

3

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 以查看 ruby​​python 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 文档中找到了相同的匹配项。

于 2013-08-09T10:39:39.590 回答
1

您的原始代码需要一些额外的行:

RubyPython.start # start the Python interpreter
sys = RubyPython.import("sys") # (add) method used to search for a directory
sys.path.append('./lib/colorific') # (add) execute search in directory
RubyPython.import("setup") # (add) call on setup.py in the directory
RubyPython.stop # stop the Python interpreter

我已经在这里设置了一个 Ruby 环境作为模板执行您想要做的事情。

于 2019-08-29T00:03:07.193 回答
0

我非常了解 Python,但我几乎从未使用过 Ruby...

这里有几个问题:

  • Python 导入是针对模块名称完成的;您正在尝试导入文件名。

    通常,您会将目录添加#{Rails.root}/lib到 Python 模块搜索路径的目录(使用PYTHONPATH环境变量或通过sys.modulesPython 代码操作列表),但您正在尝试在此处导入设置脚本

    您将运行python setup.py install安装库。或者,更好的是,为您使用pipeasy_install安装该软件包。

  • colorific是一个命令行实用程序。它似乎没有提供要导入的 API。我不会在这里使用 Ruby 到 Python 的桥接器,只需使用 Pythonsubprocess模块的 Ruby 等效项运行该工具;作为一个单独的过程。

于 2013-08-09T10:27:05.360 回答