rubypython 0.5.3 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- data.tar.gz.sig +0 -0
- data/History.rdoc +32 -0
- data/Manifest.txt +2 -5
- data/lib/rubypython.rb +73 -59
- data/lib/rubypython/conversion.rb +7 -5
- data/lib/rubypython/interpreter.rb +250 -0
- data/lib/rubypython/legacy.rb +2 -23
- data/lib/rubypython/operators.rb +10 -6
- data/lib/rubypython/pymainclass.rb +3 -2
- data/lib/rubypython/pyobject.rb +2 -1
- data/lib/rubypython/python.rb +185 -188
- data/lib/rubypython/rubypyproxy.rb +1 -1
- data/lib/rubypython/tuple.rb +10 -0
- data/spec/conversion_spec.rb +10 -2
- data/spec/python_helpers/basics.py +3 -0
- data/spec/rubypython_spec.rb +0 -24
- data/spec/spec_helper.rb +2 -0
- metadata +122 -122
- metadata.gz.sig +0 -0
- data/.gitignore +0 -13
- data/.hgignore +0 -14
- data/.hgtags +0 -9
- data/lib/rubypython/options.rb +0 -66
- data/lib/rubypython/pythonexec.rb +0 -145
data/.hgignore
DELETED
data/.hgtags
DELETED
@@ -1,9 +0,0 @@
|
|
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
|
data/lib/rubypython/options.rb
DELETED
@@ -1,66 +0,0 @@
|
|
1
|
-
require 'ostruct'
|
2
|
-
|
3
|
-
module RubyPython
|
4
|
-
# A hash for storing RubyPython execution options.
|
5
|
-
@options = {}
|
6
|
-
|
7
|
-
# A list of options which require the \Python library to be reloaded.
|
8
|
-
NEED_RELOAD = [ :python_exe ] #:nodoc
|
9
|
-
# 20110316 AZ: This option has been removed because it isn't supported in
|
10
|
-
# the current code.
|
11
|
-
# :python_lib -> The full path to the python library you wish to load.
|
12
|
-
|
13
|
-
class << self
|
14
|
-
# Allows one to set options for RubyPython's execution. Parameters may
|
15
|
-
# be set either by supplying a hash argument or by supplying a block and
|
16
|
-
# calling setters on the provided OpenStruct. Returns a copy of the
|
17
|
-
# updated options hash.
|
18
|
-
#
|
19
|
-
# [options] A Hash of options to set.
|
20
|
-
#
|
21
|
-
# The option currently supported is:
|
22
|
-
# [:python_exe] The name of or path to the \Python executable for the
|
23
|
-
# version of \Python you wish to use.
|
24
|
-
#
|
25
|
-
# RubyPython.run do
|
26
|
-
# RubyPython.import('sys').version.rubify.to_f # => 2.7
|
27
|
-
# end
|
28
|
-
#
|
29
|
-
# RubyPython.configure :python_exe => 'python2.6'
|
30
|
-
# # => { :python_exe => "python2.6" }
|
31
|
-
# RubyPython.run do
|
32
|
-
# RubyPython.import('sys').version.rubify.to_f # => 2.6
|
33
|
-
# end
|
34
|
-
#
|
35
|
-
# The options hash can also be passed directly to +RubyPython.start+,
|
36
|
-
# +RubyPython.session+, or +RubyPython.run+.
|
37
|
-
def configure(options = {})
|
38
|
-
old_values = Hash[*@options.select { |k, v| NEED_RELOAD.include? k }]
|
39
|
-
|
40
|
-
if block_given?
|
41
|
-
ostruct = OpenStruct.new @options
|
42
|
-
yield ostruct
|
43
|
-
olist = ostruct.instance_variable_get('@table').map { |k, v| [ k.to_sym, v ] }
|
44
|
-
@options = Hash[*olist]
|
45
|
-
end
|
46
|
-
@options.merge!(options)
|
47
|
-
|
48
|
-
@reload = true if NEED_RELOAD.any? { |k| @options[k] != old_values[k] }
|
49
|
-
options
|
50
|
-
end
|
51
|
-
|
52
|
-
# Returns a copy of the hash currently being used to determine run
|
53
|
-
# options. This allows the user to determine what options have been set.
|
54
|
-
# Modification of options should be done via the configure method.
|
55
|
-
def options
|
56
|
-
@options.dup
|
57
|
-
end
|
58
|
-
|
59
|
-
# Reset the options hash.
|
60
|
-
# @return [void]
|
61
|
-
def clear_options
|
62
|
-
@reload = @options.keys.any? { |k| NEED_RELOAD.include? k }
|
63
|
-
@options.clear
|
64
|
-
end
|
65
|
-
end
|
66
|
-
end
|
@@ -1,145 +0,0 @@
|
|
1
|
-
# A class that represents a \Python executable.
|
2
|
-
#
|
3
|
-
# End users may get the instance that represents the current running \Python
|
4
|
-
# interpreter (from +RubyPython.python+), but should not directly
|
5
|
-
# instantiate this class.
|
6
|
-
class RubyPython::PythonExec
|
7
|
-
# Based on the name of or path to the \Python executable provided, will
|
8
|
-
# determine:
|
9
|
-
#
|
10
|
-
# * The full path to the \Python executable.
|
11
|
-
# * The version of \Python being run.
|
12
|
-
# * The system prefix.
|
13
|
-
# * The main loadable \Python library for this version.
|
14
|
-
def initialize(python_executable)
|
15
|
-
@python = python_executable || "python"
|
16
|
-
@python = %x(#{@python} -c "import sys; print sys.executable").chomp
|
17
|
-
|
18
|
-
@version = run_command "import sys; print '%d.%d' % sys.version_info[:2]"
|
19
|
-
|
20
|
-
@dirname = File.dirname(@python)
|
21
|
-
@realname = @python.dup
|
22
|
-
if (@realname !~ /#{@version}$/ and @realname !~ /\.exe$/)
|
23
|
-
@realname = "#{@python}#{@version}"
|
24
|
-
else
|
25
|
-
basename = File.basename(@python, '.exe')
|
26
|
-
@realname = File.join(@dirname, "#{basename}#{@version.gsub(/\./, '')}")
|
27
|
-
end
|
28
|
-
@basename = File.basename(@realname)
|
29
|
-
|
30
|
-
@sys_prefix = run_command 'import sys; print sys.prefix'
|
31
|
-
@library = find_python_lib
|
32
|
-
end
|
33
|
-
|
34
|
-
def find_python_lib
|
35
|
-
# By default, the library name will be something like
|
36
|
-
# libpython2.6.so, but that won't always work.
|
37
|
-
libbase = "#{FFI::Platform::LIBPREFIX}#{@basename}"
|
38
|
-
libext = FFI::Platform::LIBSUFFIX
|
39
|
-
libname = "#{libbase}.#{libext}"
|
40
|
-
|
41
|
-
# We may need to look in multiple locations for Python, so let's
|
42
|
-
# build this as an array.
|
43
|
-
locations = [ File.join(@sys_prefix, "lib", libname) ]
|
44
|
-
|
45
|
-
if FFI::Platform.mac?
|
46
|
-
# On the Mac, let's add a special case that has even a different
|
47
|
-
# libname. This may not be fully useful on future versions of OS
|
48
|
-
# X, but it should work on 10.5 and 10.6. Even if it doesn't, the
|
49
|
-
# next step will (/usr/lib/libpython<version>.dylib is a symlink
|
50
|
-
# to the correct location).
|
51
|
-
locations << File.join(@sys_prefix, "Python")
|
52
|
-
# Let's also look in the location that was originally set in this
|
53
|
-
# library:
|
54
|
-
File.join(@sys_prefix, "lib", "#{@realname}", "config", libname)
|
55
|
-
end
|
56
|
-
|
57
|
-
if FFI::Platform.unix?
|
58
|
-
# On Unixes, let's look in some standard alternative places, too.
|
59
|
-
# Just in case. Some Unixes don't include a .so symlink when they
|
60
|
-
# should, so let's look for the base case of .so.1, too.
|
61
|
-
[ libname, "#{libname}.1" ].each do |name|
|
62
|
-
locations << File.join("/opt/local/lib", name)
|
63
|
-
locations << File.join("/opt/lib", name)
|
64
|
-
locations << File.join("/usr/local/lib", name)
|
65
|
-
locations << File.join("/usr/lib", name)
|
66
|
-
locations << File.join("/opt/local/lib64", name)
|
67
|
-
locations << File.join("/opt/lib64", name)
|
68
|
-
locations << File.join("/usr/local/lib64", name)
|
69
|
-
locations << File.join("/usr/lib64", name)
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
if FFI::Platform.windows?
|
74
|
-
# On Windows, the appropriate DLL is usually be found in
|
75
|
-
# %SYSTEMROOT%\system or %SYSTEMROOT%\system32; as a fallback we'll
|
76
|
-
# use C:\Windows\system{,32} as well as the install directory and the
|
77
|
-
# install directory + libs.
|
78
|
-
system_root = File.expand_path(ENV['SYSTEMROOT']).gsub(/\\/, '/')
|
79
|
-
locations << File.join(system_root, 'system', libname)
|
80
|
-
locations << File.join(system_root, 'system32', libname)
|
81
|
-
locations << File.join("C:/WINDOWS", "System", libname)
|
82
|
-
locations << File.join("C:/WINDOWS", "System32", libname)
|
83
|
-
locations << File.join(@dirname, libname)
|
84
|
-
locations << File.join(@dirname, 'libs', libname)
|
85
|
-
end
|
86
|
-
|
87
|
-
# Let's add alternative extensions; again, just in case.
|
88
|
-
locations.dup.each do |location|
|
89
|
-
path = File.dirname(location)
|
90
|
-
base = File.basename(location, ".#{libext}")
|
91
|
-
locations << File.join(path, "#{base}.so") # Standard Unix
|
92
|
-
locations << File.join(path, "#{base}.dylib") # Mac OS X
|
93
|
-
locations << File.join(path, "#{base}.dll") # Windows
|
94
|
-
locations << File.join(path, "#{base}.a") # Non-DLL
|
95
|
-
end
|
96
|
-
|
97
|
-
# Remove redundant locations
|
98
|
-
locations.uniq!
|
99
|
-
|
100
|
-
library = nil
|
101
|
-
|
102
|
-
locations.each do |location|
|
103
|
-
if File.exists? location
|
104
|
-
library = location
|
105
|
-
break
|
106
|
-
end
|
107
|
-
end
|
108
|
-
|
109
|
-
library
|
110
|
-
end
|
111
|
-
private :find_python_lib
|
112
|
-
|
113
|
-
# The python executable to use.
|
114
|
-
attr_reader :python
|
115
|
-
# The real name of the python executable (with version).
|
116
|
-
attr_reader :realname
|
117
|
-
# The sys.prefix for Python.
|
118
|
-
attr_reader :sys_prefix
|
119
|
-
# The Python library.
|
120
|
-
attr_reader :library
|
121
|
-
# The Python version
|
122
|
-
attr_reader :version
|
123
|
-
|
124
|
-
# Run a Python command-line command.
|
125
|
-
def run_command(command)
|
126
|
-
%x(#{@python} -c "#{command}").chomp if @python
|
127
|
-
end
|
128
|
-
|
129
|
-
def to_s
|
130
|
-
@realname
|
131
|
-
end
|
132
|
-
|
133
|
-
def inspect
|
134
|
-
if @python
|
135
|
-
"#<#{realname} #{sys_prefix}>"
|
136
|
-
else
|
137
|
-
"#<invalid interpreter>"
|
138
|
-
end
|
139
|
-
end
|
140
|
-
|
141
|
-
def invalidate!
|
142
|
-
@python = @version = @realname = @sys_prefix = @library = nil
|
143
|
-
end
|
144
|
-
private :invalidate!
|
145
|
-
end
|