rubypython 0.3.2 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. data/.autotest +3 -0
  2. data/.gemtest +0 -0
  3. data/.gitignore +13 -0
  4. data/.hgignore +14 -0
  5. data/.hgtags +7 -0
  6. data/.rspec +1 -1
  7. data/Contributors.rdoc +9 -0
  8. data/History.rdoc +148 -0
  9. data/{License.txt → License.rdoc} +7 -1
  10. data/Manifest.txt +15 -10
  11. data/PostInstall.txt +11 -4
  12. data/README.rdoc +272 -0
  13. data/Rakefile +107 -22
  14. data/autotest/discover.rb +1 -0
  15. data/lib/rubypython.rb +214 -120
  16. data/lib/rubypython/blankobject.rb +16 -14
  17. data/lib/rubypython/conversion.rb +242 -173
  18. data/lib/rubypython/legacy.rb +30 -31
  19. data/lib/rubypython/macros.rb +43 -34
  20. data/lib/rubypython/operators.rb +103 -101
  21. data/lib/rubypython/options.rb +41 -44
  22. data/lib/rubypython/pygenerator.rb +61 -0
  23. data/lib/rubypython/pymainclass.rb +46 -29
  24. data/lib/rubypython/pyobject.rb +193 -177
  25. data/lib/rubypython/python.rb +189 -176
  26. data/lib/rubypython/pythonerror.rb +54 -63
  27. data/lib/rubypython/pythonexec.rb +123 -0
  28. data/lib/rubypython/rubypyproxy.rb +213 -137
  29. data/lib/rubypython/type.rb +20 -0
  30. data/spec/basic_spec.rb +50 -0
  31. data/spec/callback_spec.rb +7 -17
  32. data/spec/conversion_spec.rb +7 -21
  33. data/spec/legacy_spec.rb +1 -16
  34. data/spec/pymainclass_spec.rb +6 -15
  35. data/spec/pyobject_spec.rb +39 -64
  36. data/spec/python_helpers/basics.py +20 -0
  37. data/spec/python_helpers/objects.py +24 -20
  38. data/spec/pythonerror_spec.rb +5 -17
  39. data/spec/refcnt_spec.rb +4 -10
  40. data/spec/rubypyclass_spec.rb +1 -11
  41. data/spec/rubypyproxy_spec.rb +45 -54
  42. data/spec/rubypython_spec.rb +45 -57
  43. data/spec/spec_helper.rb +49 -33
  44. metadata +87 -63
  45. data.tar.gz.sig +0 -0
  46. data/History.markdown +0 -97
  47. data/README.markdown +0 -105
  48. data/lib/rubypython/core_ext/string.rb +0 -7
  49. data/lib/rubypython/version.rb +0 -9
  50. data/spec/python_helpers/objects.pyc +0 -0
  51. metadata.gz.sig +0 -0
data/.autotest ADDED
@@ -0,0 +1,3 @@
1
+ require 'rubygems'
2
+
3
+ # vim: syntax=ruby
data/.gemtest ADDED
File without changes
data/.gitignore ADDED
@@ -0,0 +1,13 @@
1
+ spec/ldap.yml
2
+ .rvmrc
3
+ pkg/
4
+ *.swp
5
+ *.pyc
6
+ html/
7
+ doc/
8
+ publish/
9
+ coverage/
10
+ coverage.info
11
+ .rake_tasks~
12
+ .DS_Store
13
+ website/index.html
data/.hgignore ADDED
@@ -0,0 +1,14 @@
1
+ syntax:glob
2
+ *.o
3
+ *.so
4
+ *.bundle
5
+ *.pyc
6
+ *.log
7
+ *~
8
+ doc/*
9
+ ext/*/Makefile
10
+ *.swp
11
+ .yardoc/*
12
+ .DS_Store
13
+ pkg/*
14
+ website/index.html
data/.hgtags ADDED
@@ -0,0 +1,7 @@
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
data/.rspec CHANGED
@@ -1,2 +1,2 @@
1
1
  --colour
2
- --format d
2
+ --format documentation
data/Contributors.rdoc ADDED
@@ -0,0 +1,9 @@
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)
data/History.rdoc ADDED
@@ -0,0 +1,148 @@
1
+ === 0.5.0 / 2011-03-dd
2
+ * Major Enhancements:
3
+ * Procs and methods can be passed to Python. [raineszm]
4
+ * Python to Ruby inheritance: A Ruby class can inherit from a Python class
5
+ (EXPERIMENTAL). [steeve]
6
+ * The Python library can now be reloaded (EXPERIMENTAL). There is a good
7
+ chance of a segfault if this is used with a native extension. [raineszm]
8
+ * Python functions and methods can be called with a terminal exclamation
9
+ point to enable keyword argument processing in Python (EXPERIMENTAL). [tmm1]
10
+ * Minor Enhancements:
11
+ * Improved Python generator support. [steeve]
12
+ * PythonError now inherits from RuntimeError. [halostatue]
13
+ * Added a Py_REFCNT macro for debugging reference counting. [tmm1]
14
+ * Changes:
15
+ * Moved to RSpec2. [halostatue]
16
+ * Moved Rakefile to hoe; added autotest. [halostatue]
17
+ * Bug Fixes:
18
+ * Fixed a reference counting bug that could crash the Python VM. [steeve]
19
+ * Fixed a memory leak/reference counting bug related to method invocation
20
+ (when turning the argument list into a tuple, PyList_SetItem steals
21
+ references). Depends on FFI 1.0.7 (or higher) with modifications to
22
+ aggressively free temporary Python objects created. [tmm1]
23
+ * Restored Ruby 1.8.7 compatibility where possible. [halostatue]
24
+ * Fixed FFI loader to be more robust and do more through FFI. [halostatue]
25
+ * Fixed documentation errors. [halostatue]
26
+ * Project Management:
27
+ * Rupy has been merged back into RubyPython.
28
+ * Made the project website on RubyForge generatable from the readme and a
29
+ template. Adopted the 960 grid system and modern CSS techniques.
30
+ * Added a contributors document.
31
+
32
+ === 0.4.1 / / 2011-01-10
33
+ * Rupy was created as an active fork of Zach Raines's RubyPython and released
34
+ indepdently.
35
+ * Major Enhancements:
36
+ * Python/Ruby callbacks [steeve]
37
+ * Virtualenv support [steeve]
38
+ * Python-style generators with Ruby (generators only work on Ruby 1.9).
39
+ [steeve]
40
+
41
+ === 0.3.2 / 2011-02-02
42
+ * Major Enhancements
43
+ * Allow procs and methods to be passed to Ruby.
44
+ * Allow configuration of the loaded Python library.
45
+
46
+ === 0.3.1 / 2011-01-19
47
+ * Compatability Updates
48
+ * Cleanup of code which finds Python library thanks to Austin Ziegler.
49
+
50
+ === 0.3.0 / 2010-09-06
51
+ * Major Enhancements
52
+ * Version 0.3.0 represents an almost complete rewrite of the RubyPython
53
+ codebase.
54
+ * A native C extension is no longer required. RubyPython uses the 'ffi' gem.
55
+ * RubyPython by default now returns proxy instances for all Ruby objects. See
56
+ the documentation for more information.
57
+ * Compatibility Updates
58
+ * Version 0.3.0 was created with the goal of being compatible with as many
59
+ Ruby versions as possible. It should at the very least run on MRI 1.8.6 -
60
+ 1.9.1.
61
+ * A legacy mode option has been added to provide partial compatibility with
62
+ version 0.2.x.
63
+
64
+ === 0.2.11 / 2010-07-12
65
+ * Bug Fixes
66
+ * Fixed some issues with building the extension under ruby 1.9. Should now be
67
+ truly 1.9 compatible.
68
+
69
+ === 0.2.10 / 2010-07-08
70
+ * Bug Fixes
71
+ * Made some changes to how the native extension is configured and build.
72
+
73
+ === 0.2.9 / 2009-10-19
74
+ * Minor Enhancements
75
+ * Updated the C code to make it cleaner, more readable, and more
76
+ maintainable.
77
+
78
+ === 0.2.8 / 2009-10-05
79
+ * Bug Fixes
80
+ * Some test files were improperly formatted (minor bug fix).
81
+
82
+ === 0.2.7 / 2009-3-30
83
+ * Bug Fixes
84
+ * Fixed some bugs which caused rubypython to be unable to determine python
85
+ version correctly.
86
+
87
+ === 0.2.6 / 2009-3-19
88
+ * Bug Fixes
89
+ * Further updates to increase compatibility with 1.9.
90
+
91
+ === 0.2.5 / 2009-3-18
92
+ * Bug Fixes
93
+ * Updated to build and run under Ruby 1.9.
94
+
95
+ === 0.2.4 / 2008-10-24
96
+ * Major Enhancements
97
+ * Provided setter methods for object attributes. Python object attributes can
98
+ now be set from within ruby.
99
+ * Made wrapper classes a subclass of custom made blank object class to try to
100
+ avoid name collisions.
101
+ * Bug Fix
102
+ * Changed part of extconf.rb file that would not work under windows.
103
+
104
+ === 0.2.3 / 2008-08-29
105
+ * 2 Major Enhancements
106
+ * Introduced PyMain object as a singleton wrapper for the Python __main__ and
107
+ __builtin__ modules.
108
+ * Introduced block functionality for PyMain object.
109
+ * Compatibility Updates
110
+ * Changed some declarations in the C code to make RubyPython more compatible
111
+ with the style conventions of the Ruby C API.
112
+ * Update how RubyPython locates the Python headers and library.
113
+ * 1 Bug Fix
114
+ * Fixed an error in ptor.c that might have prevented RubyPython from building
115
+ correctly on certain systems.
116
+
117
+ === 0.2.2 / 2008-08-07
118
+ * Major Enhancements
119
+ * Wrapped classes and instances should now behave as expected.
120
+ * Gave RubyPyClasses a "new" method for creating instances.
121
+ * Callable class can now be called provided that at least one argument is
122
+ given.
123
+ * A wrapped object's respond_to? method now has some relation to its actual
124
+ methods.
125
+ * Bug fixes
126
+ * Fixed bug with inspect method of RubyPyObject that caused a bus error when
127
+ inspecting certain objects
128
+
129
+ === 0.2.1 / 2008-08-02
130
+ * 1 Bug Fix
131
+ * Incorrect require fixed
132
+
133
+ === 0.2.0 / 2008-08-02
134
+ * 3 major enhancements
135
+ * RubyPython can now effectively convert or wrap most types from Python.
136
+ * Errors in the Python interpreter are relayed to Ruby errors.
137
+ * Less seg faults by mass.
138
+ * Bug Fixes
139
+ * RubyPython.run did not work correctly. This is fixed now.
140
+ * Cleanup in RubyPython.stop fixes some issues in RubyPythonBridge.stop
141
+
142
+ === 0.1.0 / 2008-08-01
143
+ * A lot of major enhancements
144
+ * Too many to name. Hey I'm still developing
145
+
146
+ === 0.0.1 / 2008-07-30
147
+ * 1 major enhancement:
148
+ * Initial release
@@ -1,4 +1,10 @@
1
- Copyright (c) 2008-2011 Zach Raines
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.
2
8
 
3
9
  Permission is hereby granted, free of charge, to any person obtaining
4
10
  a copy of this software and associated documentation files (the
data/Manifest.txt CHANGED
@@ -1,34 +1,39 @@
1
- History.markdown
2
- License.txt
1
+ .autotest
2
+ .gitignore
3
+ .hgignore
4
+ .hgtags
5
+ .rspec
6
+ Contributors.rdoc
7
+ History.rdoc
8
+ License.rdoc
3
9
  Manifest.txt
4
10
  PostInstall.txt
5
- README.markdown
11
+ README.rdoc
6
12
  Rakefile
7
- .rspec
8
- lib/rubypython
13
+ autotest/discover.rb
9
14
  lib/rubypython.rb
10
15
  lib/rubypython/blankobject.rb
11
16
  lib/rubypython/conversion.rb
12
- lib/rubypython/core_ext
13
- lib/rubypython/core_ext/string.rb
14
17
  lib/rubypython/legacy.rb
15
18
  lib/rubypython/macros.rb
16
19
  lib/rubypython/operators.rb
17
20
  lib/rubypython/options.rb
21
+ lib/rubypython/pygenerator.rb
18
22
  lib/rubypython/pymainclass.rb
19
23
  lib/rubypython/pyobject.rb
20
24
  lib/rubypython/python.rb
21
25
  lib/rubypython/pythonerror.rb
26
+ lib/rubypython/pythonexec.rb
22
27
  lib/rubypython/rubypyproxy.rb
23
- lib/rubypython/version.rb
28
+ lib/rubypython/type.rb
29
+ spec/basic_spec.rb
24
30
  spec/callback_spec.rb
25
31
  spec/conversion_spec.rb
26
32
  spec/legacy_spec.rb
27
33
  spec/pymainclass_spec.rb
28
34
  spec/pyobject_spec.rb
29
- spec/python_helpers
35
+ spec/python_helpers/basics.py
30
36
  spec/python_helpers/objects.py
31
- spec/python_helpers/objects.pyc
32
37
  spec/pythonerror_spec.rb
33
38
  spec/refcnt_spec.rb
34
39
  spec/rubypyclass_spec.rb
data/PostInstall.txt CHANGED
@@ -1,9 +1,16 @@
1
- A number of things have changed with version 0.3.0. If you are upgrading from a previous version of RubyPython, you should check the docs for instructions on how to get your code working with the new version of RubyPython.
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.
2
5
 
3
- For more information on RubyPython, see http://raineszm.bitbucket.org/rubypython/index.html
6
+ For more information on RubyPython, see: http://rubypython.rubyforge.org/
4
7
 
5
- If you find a bug, or have any suggestions, email me at: raineszm+rubypython@gmail.com
8
+ If you find a bug, or have any suggestions, please feel free to enter them on
9
+ the tracker:
6
10
 
7
- If you would like to help develop RubyPython, also send me an email.
11
+ https://bitbucket.org/raineszm/rubypython/issues?status=new&status=open
8
12
 
13
+ If you would like to help develop RubyPython, please check out the source on
14
+ Bitbucket:
9
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 => "/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 tested on Mac OS 10.5 and 10.6, and Ubuntu 10.10 (64-bit
263
+ Intel). If your platform has a DLL or shared object version of Python and
264
+ supports the FFI gem, it should work. Feedback on other platforms is always
265
+ welcome.
266
+
267
+ == Install
268
+ gem install rubypython
269
+
270
+ :include: Contributors.rdoc
271
+
272
+ :include: License.rdoc