rubypython-raspi 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/.autotest ADDED
@@ -0,0 +1,3 @@
1
+ require 'rubygems'
2
+
3
+ # vim: syntax=ruby
data/.gitignore ADDED
@@ -0,0 +1,18 @@
1
+ *.bundle
2
+ *.log
3
+ *.o
4
+ *.pyc
5
+ *.so
6
+ *.swp
7
+ *~
8
+ .DS_Store
9
+ .rake_tasks~
10
+ .rvmrc
11
+ .yardoc/
12
+ coverage.info
13
+ coverage/
14
+ doc/
15
+ html/
16
+ pkg/
17
+ publish/
18
+ website/index.html
data/.hgignore ADDED
@@ -0,0 +1,20 @@
1
+ syntax:glob
2
+ *.bundle
3
+ *.log
4
+ *.o
5
+ *.pyc
6
+ *.so
7
+ *.swp
8
+ *~
9
+ .DS_Store
10
+ .rake_tasks~
11
+ .rvmrc
12
+ .yardoc/*
13
+ coverage.info
14
+ coverage/*
15
+ doc/*
16
+ ext/*/Makefile
17
+ html/*
18
+ pkg/*
19
+ publish/*
20
+ website/index.html
data/.hgtags ADDED
@@ -0,0 +1,10 @@
1
+ 910a6e5ac94959fd6d9b04caea995afd354531f6 v0.2.3
2
+ 7361975ce7bbbdd284e1d9f84344d4f8df6e9eab v0.2.8
3
+ 09e65f05148ae3e1ba5f54156cd7bcf159cfe14f v0.2.9
4
+ 7ebd15a009f37aefab52e8e669080eed165320a0 v0.2.10
5
+ fe1fe7136461a92e4012cd7c8f23c8c446d4fbc1 v0.2.11
6
+ 746fffb7ee3db61278d592c303939daeb6a17a03 v0.3.1
7
+ e61cfeb18e14c8d0d86e68459bf7957535c4452b v0.3.2
8
+ 0e18cecdd4b7d6261a708a9b60b80a4794efac89 r0.5.0
9
+ cd45222e2319bf006798c50f5c18669ae6160246 r0.5.2
10
+ b82963530f976af0cc0f4e62488b5112028fdfc9 r0.5.3
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --colour
2
+ --format documentation
data/Contributors.rdoc ADDED
@@ -0,0 +1,10 @@
1
+ == Contributors
2
+
3
+ RubyPython has a growing list of contributors.
4
+
5
+ * Zach Raines (raineszm)
6
+ * The creator of RubyPython.
7
+ * Steeve Morin (steeve)
8
+ * Austin Ziegler (halostatue)
9
+ * Aman Gupta (tmm1)
10
+ * Ben Doerr (bendoerr)
data/History.rdoc ADDED
@@ -0,0 +1,192 @@
1
+ === 0.6 / 2011-MM-DD
2
+ * Major Enhancements:
3
+ * Previous versions of RubyPython theoretically allowed the loading of
4
+ different Python interpreters during a single Ruby session. Because of the
5
+ likelihood of crashes, this functionality has been removed. Now, if you
6
+ attempt to start RubyPython more than once while specifying different
7
+ Python interpreters, RubyPython will print a warning and continue working
8
+ with the already loaded interpreter.
9
+ * The Python interpreter DLL will only be loaded once. It is configured with
10
+ a self-removing method, Interpreter#infect! instead of require/load reload
11
+ hacks.
12
+ * Removed RubyPython.configure; since the interpreter can only be configured
13
+ once, independent configuration no longer makes sense.
14
+ * Minor Enhancements:
15
+ * RubyPython interpreter initialization is done with a Mutex synchronization
16
+ to ensure that only one Python interpreter DLL is loaded.
17
+ * Added RubyPython::Tuple, a simple subclass of ::Array that will correctly
18
+ be converted to a Python tuple object such that isinstance(x, tuple)
19
+ returns True.
20
+ * Renamed RubyPython::PythonExec to RubyPython::Interpreter. Added some
21
+ helper methods to assist with comparison. Construction is with an options
22
+ hash.
23
+ * The #update methods on Python interpreter observers are now private. This
24
+ is an implementation detail, not a public interface. (The methods have also
25
+ been renamed to #python_interpreter_update.)
26
+ * Deprecation:
27
+ * RubyPython's legacy mode (automatic unboxing of Python proxy objects where
28
+ possible) has been deprecated and will be removed in the next non-bugfix
29
+ release after this version. Introduced a new private method
30
+ (RubyPython.legacy_mode?) to check if legacy mode is turned on so that the
31
+ deprecation warning is not printed in all uses of RubyPython.
32
+
33
+ === 0.5.3 / 2011-10-22
34
+ * Bug Fixes:
35
+ * Improved 64-bit Python detection on Unixes with Linux-like semantics (e.g.,
36
+ .../lib64). Resolves issue #7 on bitbucket.
37
+
38
+ === 0.5.2 / 2011-10-21
39
+ * Minor Enhancements:
40
+ * The traceback for Python exceptions is now returned usefully. [raineszm]
41
+ * Bug Fixes:
42
+ * Improved the robustness of Windows DLL detection. Based on work by
43
+ bendoerr, raineszm, and halostatue.
44
+
45
+ === 0.5.1 / 2011-03-17
46
+ * Major Enhancements:
47
+ * Procs and methods can be passed to Python. [raineszm]
48
+ * Python to Ruby inheritance: A Ruby class can inherit from a Python class
49
+ (EXPERIMENTAL). [steeve]
50
+ * The Python library can now be reloaded (EXPERIMENTAL). There is a good
51
+ chance of a segfault if this is used with a native extension. [raineszm]
52
+ * Python functions and methods can be called with a terminal exclamation
53
+ point to enable keyword argument processing in Python (EXPERIMENTAL). [tmm1]
54
+ * Minor Enhancements:
55
+ * Improved Python generator support. [steeve]
56
+ * PythonError now inherits from RuntimeError. [halostatue]
57
+ * Added a Py_REFCNT macro for debugging reference counting. [tmm1]
58
+ * Changes:
59
+ * Moved to RSpec2. [halostatue]
60
+ * Moved Rakefile to hoe; added autotest. [halostatue]
61
+ * Bug Fixes:
62
+ * Fixed a reference counting bug that could crash the Python VM. [steeve]
63
+ * Fixed a memory leak/reference counting bug related to method invocation
64
+ (when turning the argument list into a tuple, PyList_SetItem steals
65
+ references). Depends on FFI 1.0.7 (or higher) with modifications to
66
+ aggressively free temporary Python objects created. [tmm1]
67
+ * Restored Ruby 1.8.7 compatibility where possible. [halostatue]
68
+ * Fixed FFI loader to be more robust and do more through FFI. [halostatue]
69
+ * Fixed documentation errors. [halostatue]
70
+ * Project Management:
71
+ * Rupy has been merged back into RubyPython.
72
+ * Made the project website on RubyForge generatable from the readme and a
73
+ template. Adopted the 960 grid system and modern CSS techniques.
74
+ * Added a contributors document.
75
+
76
+ === 0.4.1 / / 2011-01-10
77
+ * Rupy was created as an active fork of Zach Raines's RubyPython and released
78
+ indepdently.
79
+ * Major Enhancements:
80
+ * Python/Ruby callbacks [steeve]
81
+ * Virtualenv support [steeve]
82
+ * Python-style generators with Ruby (generators only work on Ruby 1.9).
83
+ [steeve]
84
+
85
+ === 0.3.2 / 2011-02-02
86
+ * Major Enhancements
87
+ * Allow procs and methods to be passed to Ruby.
88
+ * Allow configuration of the loaded Python library.
89
+
90
+ === 0.3.1 / 2011-01-19
91
+ * Compatability Updates
92
+ * Cleanup of code which finds Python library thanks to Austin Ziegler.
93
+
94
+ === 0.3.0 / 2010-09-06
95
+ * Major Enhancements
96
+ * Version 0.3.0 represents an almost complete rewrite of the RubyPython
97
+ codebase.
98
+ * A native C extension is no longer required. RubyPython uses the 'ffi' gem.
99
+ * RubyPython by default now returns proxy instances for all Ruby objects. See
100
+ the documentation for more information.
101
+ * Compatibility Updates
102
+ * Version 0.3.0 was created with the goal of being compatible with as many
103
+ Ruby versions as possible. It should at the very least run on MRI 1.8.6 -
104
+ 1.9.1.
105
+ * A legacy mode option has been added to provide partial compatibility with
106
+ version 0.2.x.
107
+
108
+ === 0.2.11 / 2010-07-12
109
+ * Bug Fixes
110
+ * Fixed some issues with building the extension under ruby 1.9. Should now be
111
+ truly 1.9 compatible.
112
+
113
+ === 0.2.10 / 2010-07-08
114
+ * Bug Fixes
115
+ * Made some changes to how the native extension is configured and build.
116
+
117
+ === 0.2.9 / 2009-10-19
118
+ * Minor Enhancements
119
+ * Updated the C code to make it cleaner, more readable, and more
120
+ maintainable.
121
+
122
+ === 0.2.8 / 2009-10-05
123
+ * Bug Fixes
124
+ * Some test files were improperly formatted (minor bug fix).
125
+
126
+ === 0.2.7 / 2009-3-30
127
+ * Bug Fixes
128
+ * Fixed some bugs which caused rubypython to be unable to determine python
129
+ version correctly.
130
+
131
+ === 0.2.6 / 2009-3-19
132
+ * Bug Fixes
133
+ * Further updates to increase compatibility with 1.9.
134
+
135
+ === 0.2.5 / 2009-3-18
136
+ * Bug Fixes
137
+ * Updated to build and run under Ruby 1.9.
138
+
139
+ === 0.2.4 / 2008-10-24
140
+ * Major Enhancements
141
+ * Provided setter methods for object attributes. Python object attributes can
142
+ now be set from within ruby.
143
+ * Made wrapper classes a subclass of custom made blank object class to try to
144
+ avoid name collisions.
145
+ * Bug Fix
146
+ * Changed part of extconf.rb file that would not work under windows.
147
+
148
+ === 0.2.3 / 2008-08-29
149
+ * 2 Major Enhancements
150
+ * Introduced PyMain object as a singleton wrapper for the Python __main__ and
151
+ __builtin__ modules.
152
+ * Introduced block functionality for PyMain object.
153
+ * Compatibility Updates
154
+ * Changed some declarations in the C code to make RubyPython more compatible
155
+ with the style conventions of the Ruby C API.
156
+ * Update how RubyPython locates the Python headers and library.
157
+ * 1 Bug Fix
158
+ * Fixed an error in ptor.c that might have prevented RubyPython from building
159
+ correctly on certain systems.
160
+
161
+ === 0.2.2 / 2008-08-07
162
+ * Major Enhancements
163
+ * Wrapped classes and instances should now behave as expected.
164
+ * Gave RubyPyClasses a "new" method for creating instances.
165
+ * Callable class can now be called provided that at least one argument is
166
+ given.
167
+ * A wrapped object's respond_to? method now has some relation to its actual
168
+ methods.
169
+ * Bug fixes
170
+ * Fixed bug with inspect method of RubyPyObject that caused a bus error when
171
+ inspecting certain objects
172
+
173
+ === 0.2.1 / 2008-08-02
174
+ * 1 Bug Fix
175
+ * Incorrect require fixed
176
+
177
+ === 0.2.0 / 2008-08-02
178
+ * 3 major enhancements
179
+ * RubyPython can now effectively convert or wrap most types from Python.
180
+ * Errors in the Python interpreter are relayed to Ruby errors.
181
+ * Less seg faults by mass.
182
+ * Bug Fixes
183
+ * RubyPython.run did not work correctly. This is fixed now.
184
+ * Cleanup in RubyPython.stop fixes some issues in RubyPythonBridge.stop
185
+
186
+ === 0.1.0 / 2008-08-01
187
+ * A lot of major enhancements
188
+ * Too many to name. Hey I'm still developing
189
+
190
+ === 0.0.1 / 2008-07-30
191
+ * 1 major enhancement:
192
+ * Initial release
data/License.rdoc ADDED
@@ -0,0 +1,26 @@
1
+ == License
2
+
3
+ This software is available under the terms of the MIT license.
4
+
5
+ * Copyright 2011 Zach Raines, Steeve Morin, Austin Ziegler, and other
6
+ contributors.
7
+ * Copyright 2008–2010 Zach Raines.
8
+
9
+ Permission is hereby granted, free of charge, to any person obtaining
10
+ a copy of this software and associated documentation files (the
11
+ "Software"), to deal in the Software without restriction, including
12
+ without limitation the rights to use, copy, modify, merge, publish,
13
+ distribute, sublicense, and/or sell copies of the Software, and to
14
+ permit persons to whom the Software is furnished to do so, subject to
15
+ the following conditions:
16
+
17
+ The above copyright notice and this permission notice shall be
18
+ included in all copies or substantial portions of the Software.
19
+
20
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
24
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Manifest.txt ADDED
@@ -0,0 +1,43 @@
1
+ .autotest
2
+ .gitignore
3
+ .hgignore
4
+ .hgtags
5
+ .rspec
6
+ Contributors.rdoc
7
+ History.rdoc
8
+ License.rdoc
9
+ Manifest.txt
10
+ PostInstall.txt
11
+ README.rdoc
12
+ Rakefile
13
+ autotest/discover.rb
14
+ lib/rubypython.rb
15
+ lib/rubypython/blankobject.rb
16
+ lib/rubypython/conversion.rb
17
+ lib/rubypython/legacy.rb
18
+ lib/rubypython/macros.rb
19
+ lib/rubypython/operators.rb
20
+ lib/rubypython/options.rb
21
+ lib/rubypython/pygenerator.rb
22
+ lib/rubypython/pymainclass.rb
23
+ lib/rubypython/pyobject.rb
24
+ lib/rubypython/python.rb
25
+ lib/rubypython/pythonerror.rb
26
+ lib/rubypython/pythonexec.rb
27
+ lib/rubypython/rubypyproxy.rb
28
+ lib/rubypython/type.rb
29
+ spec/basic_spec.rb
30
+ spec/callback_spec.rb
31
+ spec/conversion_spec.rb
32
+ spec/legacy_spec.rb
33
+ spec/pymainclass_spec.rb
34
+ spec/pyobject_spec.rb
35
+ spec/python_helpers/basics.py
36
+ spec/python_helpers/errors.py
37
+ spec/python_helpers/objects.py
38
+ spec/pythonerror_spec.rb
39
+ spec/refcnt_spec.rb
40
+ spec/rubypyclass_spec.rb
41
+ spec/rubypyproxy_spec.rb
42
+ spec/rubypython_spec.rb
43
+ spec/spec_helper.rb
data/PostInstall.txt ADDED
@@ -0,0 +1,16 @@
1
+ RubyPython version 0.3 and higher are different than RubyPython through
2
+ version 0.2.x. If you're upgrading from such an earlier version, make sure you
3
+ read the documents for instructions on how your code needs to change to work
4
+ with modern RubyPython.
5
+
6
+ For more information on RubyPython, see: http://rubypython.rubyforge.org/
7
+
8
+ If you find a bug, or have any suggestions, please feel free to enter them on
9
+ the tracker:
10
+
11
+ https://bitbucket.org/raineszm/rubypython/issues?status=new&status=open
12
+
13
+ If you would like to help develop RubyPython, please check out the source on
14
+ Bitbucket:
15
+
16
+ https://bitbucket.org/raineszm/rubypython/
data/README.rdoc ADDED
@@ -0,0 +1,272 @@
1
+ = rubypython
2
+
3
+ == Description
4
+
5
+ RubyPython is a bridge between the Ruby and Python interpreters. It embeds a
6
+ running Python interpreter in the Ruby application's process using FFI and
7
+ provides a means for wrapping, converting, and calling Python objects and
8
+ methods.
9
+
10
+ RubyPython uses FFI to marshal the data between the Ruby and Python VMs and
11
+ make Python calls. You can:
12
+
13
+ * Inherit from Python classes.
14
+ * Configure callbacks from Python.
15
+ * Run Python generators (on Ruby 1.9.2 or later).
16
+
17
+ == Where
18
+
19
+ * {RubyForge}[http://rubypython.rubyforge.org/]
20
+ * {RubyGems}[http://rubygems.org/gems/rubypython]
21
+ * {Bitbucket}[http://raineszm.bitbucket.org/rubypython/]
22
+ * {GitHub}[https://github.com/halostatue/rubypython]
23
+
24
+ The RubyPython homepage, project description, and main downloads can be found
25
+ on {RubyForge}[http://rubypython.rubyforge.org/].
26
+
27
+ Source is kept in sync between
28
+ {Bitbucket}[http://raineszm.bitbucket.org/rubypython/] and
29
+ {GitHub}[https://github.com/halostatue/rubypython], but the Bitbucket
30
+ repository is the canonical repository and where the {issue
31
+ tracker}[https://bitbucket.org/raineszm/rubypython/issues?status=new&status=open]
32
+ resides. We use {Hg-Git}[http://hg-git.github.com/] to keep the two
33
+ repositories in sync.
34
+
35
+ == Synopsis
36
+
37
+ RubyPython is fairly easy to start using; there are three phases to its use:
38
+
39
+ 1. Start the Python interpreter (+RubyPython.start+).
40
+ 2. Import and use Python code (+RubyPython.import+).
41
+ 3. Stop the Python interpreter (+RubyPython.stop+).
42
+
43
+ There are also two methods, +RubyPython.session+ and +RubyPython.run+ that will
44
+ start before running the code provided in the block and stop it afterwards.
45
+
46
+ === Basic Usage
47
+
48
+ require "rubypython"
49
+
50
+ RubyPython.start # start the Python interpreter
51
+
52
+ cPickle = RubyPython.import("cPickle")
53
+ p cPickle.dumps("Testing RubyPython.").rubify
54
+
55
+ RubyPython.stop # stop the Python interpreter
56
+
57
+ === Specific Python Version
58
+
59
+ require "rubypython"
60
+
61
+ RubyPython.start(:python_exe => "python2.7") # Can also be a full path
62
+
63
+ cPickle = RubyPython.import("cPickle")
64
+ p cPickle.dumps("Testing RubyPython.").rubify
65
+
66
+ RubyPython.stop # stop the Python interpreter
67
+
68
+ === VirtualEnv
69
+
70
+ # Easy
71
+ RubyPython.start_from_virtualenv("/path/to/virtualenv")
72
+
73
+ # Or verbose
74
+ RubyPython.start(:python_exe => "/path/to/virtualenv/bin/python")
75
+ RubyPython.activate
76
+
77
+ === Iterator support
78
+
79
+ # Python
80
+ def readfile():
81
+ for line in open("/some/file"):
82
+ yield line
83
+
84
+ # Ruby
85
+ readfile.to_enum.each do |line|
86
+ puts line
87
+ end
88
+
89
+ # Python
90
+ def iterate_list():
91
+ for item in [ 1, 2, 3 ]:
92
+ yield item
93
+
94
+ # Ruby
95
+ items = []
96
+ iterate_list.to_enum.each { |item| items << item }
97
+ puts items == [ 1, 2, 3 ] # => true
98
+
99
+ === Python to Ruby callbacks
100
+
101
+ # Python
102
+ def simple_callback(callback, value):
103
+ return callback(value)
104
+
105
+ # Ruby
106
+ simple_callback(lambda { |v| v * v }, 4) # => 16
107
+
108
+ def triple(v)
109
+ v * 3
110
+ end
111
+
112
+ simple_callback(method(:triple), 4) # => 12
113
+
114
+ === Python-style Generators
115
+
116
+ # Python
117
+ def test_generator(callback):
118
+ for i in callback():
119
+ print "Got %d" % i
120
+
121
+ # Ruby 1.9.2 or later
122
+ test_generator(RubyPython.generator do
123
+ (0..10).each { |i| RubyPython.yield i }
124
+ end)
125
+
126
+ === Python named arguments (Experimental)
127
+
128
+ This format is experimental and may be changed.
129
+
130
+ # Python
131
+ def foo(arg1, arg2):
132
+ pass
133
+
134
+ # Ruby
135
+ foo!(:arg2 => "bar2", :arg1 => "bar1")
136
+
137
+ # with Ruby 1.9
138
+ foo!(arg2: "bar2", arg1: "bar1")
139
+
140
+ == Features / Problems
141
+
142
+ === Features
143
+
144
+ * Simple two-way conversion of built-in types between Ruby and Python.
145
+ * Python module import and arbitrary method execution.
146
+ * Python objects can be treated as Ruby objects.
147
+ * Python's standard library available from within Ruby.
148
+ * Pass Ruby methods and procs as callbacks and call them from within Python
149
+ code.
150
+ * Specify the Python executable to be loaded, including using virtualenv.
151
+
152
+ ==== Experimental Features
153
+
154
+ * Calling Python methods or functions that expect keyword arguments, or call
155
+ any Python method or function with named parameters.
156
+
157
+ # Python
158
+ def func(a, b, c):
159
+ pass
160
+
161
+ # Ruby
162
+ func!(:b => 2, :c => 3, :a => 1) # => [ 1, 2, 3 ]
163
+
164
+ While we are committed to keeping this feature in place, we have not yet
165
+ determined that the form (+method!+) is the best way to achieve this
166
+ functionality.
167
+
168
+ This mechanism is experimental because the use of the bang at the end of the
169
+ method to indicate the use of keyword arguments may not be the best use of
170
+ that feature of Ruby naming.
171
+
172
+ * Changing Python interpreters in a single Ruby program. Under some
173
+ circumstances, this will partially work. If a native Python extension has
174
+ been imported (such as +cPickle+), there is a very high likelihood that there
175
+ will be a segmentation fault because the newly loaded DLL will still refer to
176
+ the other version's loaded extension. This is not a recommended workflow.
177
+
178
+ === Known Problems
179
+
180
+ * Built-in Python methods requiring a top-level frame object (such as eval(),
181
+ dir(), and the like) do not work properly at present.
182
+ * There is no support for passing complicated (non-basic) Ruby types to Python.
183
+
184
+ == What's planned
185
+ There are features that are not currently supported in RubyPython that may be
186
+ considered for future releases, dependent on need, interest, and solutions.
187
+
188
+ === Python 3
189
+ We do plan on working this, but as none of the projects any of us are working
190
+ on require Python 3 as of yet, this is not yet started.
191
+
192
+ === Simpler Imports
193
+ It might be nice to have some nice import helpers provided by RubyPython to
194
+ make the interface more seamless and provide advanced import features:
195
+
196
+ ==== Import Aliasing
197
+
198
+ # Python
199
+ from mod2.mod1 import sym as mysym
200
+
201
+ # Ruby
202
+ py :from => "mod2.mod1", :import => "sym", :as => "mysym"
203
+ py :from => "mod2.mod1", :import => :sym, :as => :mysym
204
+ py :from => [ :mod2, :mod1 ], :import => :sym, :as => :mysym
205
+
206
+ # Python
207
+ import mod1 as mymod
208
+
209
+ # Ruby
210
+ py :import => "mod1", :as => "mymod"
211
+ py :import => :mod1, :as => :mymod
212
+
213
+ # Python
214
+ from mod2.mod1 import *
215
+
216
+ # Ruby
217
+ py :from => "mod2.mod1", :import => :*
218
+ pyrequire "mod2/mod1" # ruby style imports
219
+
220
+ === Catch Exceptions from Ruby
221
+
222
+ # Python
223
+ class MyFirstException(Exception):
224
+ pass
225
+
226
+ class MySecondException(MyFirstException):
227
+ pass
228
+
229
+ def test():
230
+ raise MySecondException
231
+
232
+ # Ruby
233
+ begin
234
+ test
235
+ rescue MyFirstException => e
236
+ # We may need to work out name collisions
237
+ puts e.message
238
+ end
239
+
240
+ == Requirements
241
+
242
+ * Python >= 2.4, < 3.0
243
+ * Ruby >= 1.8.6, or JRuby >= 1.6.0
244
+ * You must either have the ability to build the Ruby
245
+ {FFI}[https://github.com/ffi/ffi] gem, version 1.0.7 or better in your
246
+ environment or have a pre-built one that you can install.
247
+
248
+ === Python Support
249
+ RubyPython has been tested with the C-based Python interpreter (cpython),
250
+ versions 2.4 through 2.7. Work is planned to enable Python 3 support, but has
251
+ not yet been started. If you're interested in helping us enable Python 3
252
+ support, please let us know.
253
+
254
+ === Ruby Support
255
+ * Ruby 1.8.7 and 1.9.2 (MRI)
256
+ * JRuby 1.6.0
257
+
258
+ It should work with other implementations that support the Ruby FFI gem with no
259
+ modification.
260
+
261
+ === OS Support
262
+ RubyPython has been extensively tested on Mac OS 10.5 and 10.6, and Ubuntu
263
+ 10.10 (64-bit Intel). If your platform has a DLL or shared object version of
264
+ Python and supports the FFI gem, it should work. Feedback on other platforms is
265
+ always welcome.
266
+
267
+ == Install
268
+ gem install rubypython
269
+
270
+ :include: Contributors.rdoc
271
+
272
+ :include: License.rdoc