@@ -71,79 +71,6 @@ public struct PythonLibrary {
71
71
}
72
72
}
73
73
74
- // Methods of `PythonLibrary` required to set a given Python version.
75
- extension PythonLibrary {
76
- private static func enforceNonLoadedPythonLibrary( function: String = #function) {
77
- precondition ( !self . isPythonLibraryLoaded, """
78
- Error: \( function) should not be called after any Python library \
79
- has already been loaded.
80
- """ )
81
- }
82
-
83
- public static func useVersion( _ major: Int , _ minor: Int ? = nil ) {
84
- self . enforceNonLoadedPythonLibrary ( )
85
- let version = PythonVersion ( major: major, minor: minor)
86
- PythonLibrary . Environment. version. set ( version. versionString)
87
- }
88
-
89
- public static func useLibrary( at path: String ) {
90
- self . enforceNonLoadedPythonLibrary ( )
91
- PythonLibrary . Environment. library. set ( path)
92
- }
93
- }
94
-
95
- // `PythonVersion` struct that defines a given Python version.
96
- extension PythonLibrary {
97
- private struct PythonVersion {
98
- let major : Int
99
- let minor : Int ?
100
-
101
- static let versionSeparator : Character = " . "
102
-
103
- init ( major: Int , minor: Int ? ) {
104
- self . major = major
105
- self . minor = minor
106
- }
107
-
108
- var versionString : String {
109
- var versionString = String ( major)
110
- if let minor = minor {
111
- versionString += " \( PythonVersion . versionSeparator) \( minor) "
112
- }
113
- return versionString
114
- }
115
- }
116
- }
117
-
118
- // `PythonLibrary.Environment` enum used to read and set environment variables.
119
- extension PythonLibrary {
120
- private enum Environment : String {
121
- private static let keyPrefix = " PYTHON "
122
- private static let keySeparator = " _ "
123
-
124
- case library = " LIBRARY "
125
- case version = " VERSION "
126
- case loaderLogging = " LOADER_LOGGING "
127
-
128
- var key : String {
129
- return Environment . keyPrefix + Environment. keySeparator + rawValue
130
- }
131
-
132
- var value : String ? {
133
- guard let value = getenv ( key) else { return nil }
134
- return String ( cString: value)
135
- }
136
-
137
- func set( _ value: String ) {
138
- #if canImport(Darwin) || canImport(Glibc)
139
- setenv ( key, value, 1 )
140
- #elseif os(Windows)
141
- _putenv_s ( key, value)
142
- #endif
143
- }
144
- }
145
- }
146
-
147
74
// Methods of `PythonLibrary` required to load the Python library.
148
75
extension PythonLibrary {
149
76
private static let supportedMajorVersions : [ Int ] = [ 3 , 2 ]
@@ -267,6 +194,79 @@ extension PythonLibrary {
267
194
}
268
195
}
269
196
197
+ // Methods of `PythonLibrary` required to set a given Python version.
198
+ extension PythonLibrary {
199
+ private static func enforceNonLoadedPythonLibrary( function: String = #function) {
200
+ precondition ( !self . isPythonLibraryLoaded, """
201
+ Error: \( function) should not be called after any Python library \
202
+ has already been loaded.
203
+ """ )
204
+ }
205
+
206
+ public static func useVersion( _ major: Int , _ minor: Int ? = nil ) {
207
+ self . enforceNonLoadedPythonLibrary ( )
208
+ let version = PythonVersion ( major: major, minor: minor)
209
+ PythonLibrary . Environment. version. set ( version. versionString)
210
+ }
211
+
212
+ public static func useLibrary( at path: String ) {
213
+ self . enforceNonLoadedPythonLibrary ( )
214
+ PythonLibrary . Environment. library. set ( path)
215
+ }
216
+ }
217
+
218
+ // `PythonVersion` struct that defines a given Python version.
219
+ extension PythonLibrary {
220
+ private struct PythonVersion {
221
+ let major : Int
222
+ let minor : Int ?
223
+
224
+ static let versionSeparator : Character = " . "
225
+
226
+ init ( major: Int , minor: Int ? ) {
227
+ self . major = major
228
+ self . minor = minor
229
+ }
230
+
231
+ var versionString : String {
232
+ var versionString = String ( major)
233
+ if let minor = minor {
234
+ versionString += " \( PythonVersion . versionSeparator) \( minor) "
235
+ }
236
+ return versionString
237
+ }
238
+ }
239
+ }
240
+
241
+ // `PythonLibrary.Environment` enum used to read and set environment variables.
242
+ extension PythonLibrary {
243
+ private enum Environment : String {
244
+ private static let keyPrefix = " PYTHON "
245
+ private static let keySeparator = " _ "
246
+
247
+ case library = " LIBRARY "
248
+ case version = " VERSION "
249
+ case loaderLogging = " LOADER_LOGGING "
250
+
251
+ var key : String {
252
+ return Environment . keyPrefix + Environment. keySeparator + rawValue
253
+ }
254
+
255
+ var value : String ? {
256
+ guard let value = getenv ( key) else { return nil }
257
+ return String ( cString: value)
258
+ }
259
+
260
+ func set( _ value: String ) {
261
+ #if canImport(Darwin) || canImport(Glibc)
262
+ setenv ( key, value, 1 )
263
+ #elseif os(Windows)
264
+ _putenv_s ( key, value)
265
+ #endif
266
+ }
267
+ }
268
+ }
269
+
270
270
// Methods of `PythonLibrary` used for logging messages.
271
271
extension PythonLibrary {
272
272
private static func log( _ message: String ) {
0 commit comments