rubypython 0.5.3 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|