@@ -151,63 +151,67 @@ def args_from_config():
151
151
assert os .path .exists (default_bindir )
152
152
CONFIG ['libpath' ] = libpath
153
153
154
- # Initialise Julia
155
- d = os .getcwd ()
154
+ # Add the Julia library directory to the PATH on Windows so Julia's system libraries can
155
+ # be found. They are normally found because they are in the same directory as julia.exe,
156
+ # but python.exe is somewhere else!
157
+ if os .name == 'nt' :
158
+ libdir = os .path .dirname (libpath )
159
+ if 'PATH' in os .environ :
160
+ os .environ ['PATH' ] = libdir + ';' + os .environ ['PATH' ]
161
+ else :
162
+ os .environ ['PATH' ] = libdir
163
+
164
+ # Open the library
165
+ CONFIG ['lib' ] = lib = c .CDLL (libpath , mode = c .RTLD_GLOBAL )
166
+
167
+ # parse options
168
+ argc , argv = args_from_config ()
169
+ jl_parse_opts = lib .jl_parse_opts
170
+ jl_parse_opts .argtypes = [c .c_void_p , c .c_void_p ]
171
+ jl_parse_opts .restype = None
172
+ jl_parse_opts (c .pointer (argc ), c .pointer (argv ))
173
+ assert argc .value == 0
174
+
175
+ # initialise julia
156
176
try :
157
- # Open the library
158
- os .chdir (os .path .dirname (libpath ))
159
- CONFIG ['lib' ] = lib = c .CDLL (libpath , mode = c .RTLD_GLOBAL )
160
-
161
- # parse options
162
- argc , argv = args_from_config ()
163
- jl_parse_opts = lib .jl_parse_opts
164
- jl_parse_opts .argtypes = [c .c_void_p , c .c_void_p ]
165
- jl_parse_opts .restype = None
166
- jl_parse_opts (c .pointer (argc ), c .pointer (argv ))
167
- assert argc .value == 0
168
-
169
- # initialise julia
170
- try :
171
- jl_init = lib .jl_init_with_image__threading
172
- except AttributeError :
173
- jl_init = lib .jl_init_with_image
174
- jl_init .argtypes = [c .c_char_p , c .c_char_p ]
175
- jl_init .restype = None
176
- jl_init (
177
- (default_bindir if bindir is None else bindir ).encode ('utf8' ),
178
- None if sysimg is None else sysimg .encode ('utf8' ),
179
- )
180
-
181
- # initialise PythonCall
182
- jl_eval = lib .jl_eval_string
183
- jl_eval .argtypes = [c .c_char_p ]
184
- jl_eval .restype = c .c_void_p
185
- def jlstr (x ):
186
- return 'raw"' + x .replace ('"' , '\\ "' ).replace ('\\ ' , '\\ \\ ' ) + '"'
187
- script = '''
188
- try
189
- Base.require(Main, :CompilerSupportLibraries_jll)
190
- import Pkg
191
- ENV["JULIA_PYTHONCALL_LIBPTR"] = {}
192
- ENV["JULIA_PYTHONCALL_EXE"] = {}
193
- Pkg.activate({}, io=devnull)
194
- import PythonCall
195
- catch err
196
- print(stderr, "ERROR: ")
197
- showerror(stderr, err, catch_backtrace())
198
- flush(stderr)
199
- rethrow()
200
- end
201
- ''' .format (
202
- jlstr (str (c .pythonapi ._handle )),
203
- jlstr (sys .executable or '' ),
204
- jlstr (project ),
205
- )
206
- res = jl_eval (script .encode ('utf8' ))
207
- if res is None :
208
- raise Exception ('PythonCall.jl did not start properly' )
209
- finally :
210
- os .chdir (d )
177
+ jl_init = lib .jl_init_with_image__threading
178
+ except AttributeError :
179
+ jl_init = lib .jl_init_with_image
180
+ jl_init .argtypes = [c .c_char_p , c .c_char_p ]
181
+ jl_init .restype = None
182
+ jl_init (
183
+ (default_bindir if bindir is None else bindir ).encode ('utf8' ),
184
+ None if sysimg is None else sysimg .encode ('utf8' ),
185
+ )
186
+
187
+ # initialise PythonCall
188
+ jl_eval = lib .jl_eval_string
189
+ jl_eval .argtypes = [c .c_char_p ]
190
+ jl_eval .restype = c .c_void_p
191
+ def jlstr (x ):
192
+ return 'raw"' + x .replace ('"' , '\\ "' ).replace ('\\ ' , '\\ \\ ' ) + '"'
193
+ script = '''
194
+ try
195
+ Base.require(Main, :CompilerSupportLibraries_jll)
196
+ import Pkg
197
+ ENV["JULIA_PYTHONCALL_LIBPTR"] = {}
198
+ ENV["JULIA_PYTHONCALL_EXE"] = {}
199
+ Pkg.activate({}, io=devnull)
200
+ import PythonCall
201
+ catch err
202
+ print(stderr, "ERROR: ")
203
+ showerror(stderr, err, catch_backtrace())
204
+ flush(stderr)
205
+ rethrow()
206
+ end
207
+ ''' .format (
208
+ jlstr (str (c .pythonapi ._handle )),
209
+ jlstr (sys .executable or '' ),
210
+ jlstr (project ),
211
+ )
212
+ res = jl_eval (script .encode ('utf8' ))
213
+ if res is None :
214
+ raise Exception ('PythonCall.jl did not start properly' )
211
215
212
216
CONFIG ['inited' ] = True
213
217
0 commit comments