Kano001 commited on
Commit
8b44c6c
1 Parent(s): 37e96b8

Upload 25 files

Browse files
MLPY/Scripts/Activate.ps1 ADDED
@@ -0,0 +1,437 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <#
2
+ .Synopsis
3
+ Activate a Python virtual environment for the current PowerShell session.
4
+
5
+ .Description
6
+ Pushes the python executable for a virtual environment to the front of the
7
+ $Env:PATH environment variable and sets the prompt to signify that you are
8
+ in a Python virtual environment. Makes use of the command line switches as
9
+ well as the `pyvenv.cfg` file values present in the virtual environment.
10
+
11
+ .Parameter VenvDir
12
+ Path to the directory that contains the virtual environment to activate. The
13
+ default value for this is the parent of the directory that the Activate.ps1
14
+ script is located within.
15
+
16
+ .Parameter Prompt
17
+ The prompt prefix to display when this virtual environment is activated. By
18
+ default, this prompt is the name of the virtual environment folder (VenvDir)
19
+ surrounded by parentheses and followed by a single space (ie. '(.venv) ').
20
+
21
+ .Example
22
+ Activate.ps1
23
+ Activates the Python virtual environment that contains the Activate.ps1 script.
24
+
25
+ .Example
26
+ Activate.ps1 -Verbose
27
+ Activates the Python virtual environment that contains the Activate.ps1 script,
28
+ and shows extra information about the activation as it executes.
29
+
30
+ .Example
31
+ Activate.ps1 -VenvDir C:\Users\MyUser\Common\.venv
32
+ Activates the Python virtual environment located in the specified location.
33
+
34
+ .Example
35
+ Activate.ps1 -Prompt "MyPython"
36
+ Activates the Python virtual environment that contains the Activate.ps1 script,
37
+ and prefixes the current prompt with the specified string (surrounded in
38
+ parentheses) while the virtual environment is active.
39
+
40
+ .Notes
41
+ On Windows, it may be required to enable this Activate.ps1 script by setting the
42
+ execution policy for the user. You can do this by issuing the following PowerShell
43
+ command:
44
+
45
+ PS C:\> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
46
+
47
+ For more information on Execution Policies:
48
+ https://go.microsoft.com/fwlink/?LinkID=135170
49
+
50
+ #>
51
+ Param(
52
+ [Parameter(Mandatory = $false)]
53
+ [String]
54
+ $VenvDir,
55
+ [Parameter(Mandatory = $false)]
56
+ [String]
57
+ $Prompt
58
+ )
59
+
60
+ <# Function declarations --------------------------------------------------- #>
61
+
62
+ <#
63
+ .Synopsis
64
+ Remove all shell session elements added by the Activate script, including the
65
+ addition of the virtual environment's Python executable from the beginning of
66
+ the PATH variable.
67
+
68
+ .Parameter NonDestructive
69
+ If present, do not remove this function from the global namespace for the
70
+ session.
71
+
72
+ #>
73
+ function global:deactivate ([switch]$NonDestructive) {
74
+ # Revert to original values
75
+
76
+ # The prior prompt:
77
+ if (Test-Path -Path Function:_OLD_VIRTUAL_PROMPT) {
78
+ Copy-Item -Path Function:_OLD_VIRTUAL_PROMPT -Destination Function:prompt
79
+ Remove-Item -Path Function:_OLD_VIRTUAL_PROMPT
80
+ }
81
+
82
+ # The prior PYTHONHOME:
83
+ if (Test-Path -Path Env:_OLD_VIRTUAL_PYTHONHOME) {
84
+ Copy-Item -Path Env:_OLD_VIRTUAL_PYTHONHOME -Destination Env:PYTHONHOME
85
+ Remove-Item -Path Env:_OLD_VIRTUAL_PYTHONHOME
86
+ }
87
+
88
+ # The prior PATH:
89
+ if (Test-Path -Path Env:_OLD_VIRTUAL_PATH) {
90
+ Copy-Item -Path Env:_OLD_VIRTUAL_PATH -Destination Env:PATH
91
+ Remove-Item -Path Env:_OLD_VIRTUAL_PATH
92
+ }
93
+
94
+ # Just remove the VIRTUAL_ENV altogether:
95
+ if (Test-Path -Path Env:VIRTUAL_ENV) {
96
+ Remove-Item -Path env:VIRTUAL_ENV
97
+ }
98
+
99
+ # Just remove the _PYTHON_VENV_PROMPT_PREFIX altogether:
100
+ if (Get-Variable -Name "_PYTHON_VENV_PROMPT_PREFIX" -ErrorAction SilentlyContinue) {
101
+ Remove-Variable -Name _PYTHON_VENV_PROMPT_PREFIX -Scope Global -Force
102
+ }
103
+
104
+ # Leave deactivate function in the global namespace if requested:
105
+ if (-not $NonDestructive) {
106
+ Remove-Item -Path function:deactivate
107
+ }
108
+ }
109
+
110
+ <#
111
+ .Description
112
+ Get-PyVenvConfig parses the values from the pyvenv.cfg file located in the
113
+ given folder, and returns them in a map.
114
+
115
+ For each line in the pyvenv.cfg file, if that line can be parsed into exactly
116
+ two strings separated by `=` (with any amount of whitespace surrounding the =)
117
+ then it is considered a `key = value` line. The left hand string is the key,
118
+ the right hand is the value.
119
+
120
+ If the value starts with a `'` or a `"` then the first and last character is
121
+ stripped from the value before being captured.
122
+
123
+ .Parameter ConfigDir
124
+ Path to the directory that contains the `pyvenv.cfg` file.
125
+ #>
126
+ function Get-PyVenvConfig(
127
+ [String]
128
+ $ConfigDir
129
+ ) {
130
+ Write-Verbose "Given ConfigDir=$ConfigDir, obtain values in pyvenv.cfg"
131
+
132
+ # Ensure the file exists, and issue a warning if it doesn't (but still allow the function to continue).
133
+ $pyvenvConfigPath = Join-Path -Resolve -Path $ConfigDir -ChildPath 'pyvenv.cfg' -ErrorAction Continue
134
+
135
+ # An empty map will be returned if no config file is found.
136
+ $pyvenvConfig = @{ }
137
+
138
+ if ($pyvenvConfigPath) {
139
+
140
+ Write-Verbose "File exists, parse `key = value` lines"
141
+ $pyvenvConfigContent = Get-Content -Path $pyvenvConfigPath
142
+
143
+ $pyvenvConfigContent | ForEach-Object {
144
+ $keyval = $PSItem -split "\s*=\s*", 2
145
+ if ($keyval[0] -and $keyval[1]) {
146
+ $val = $keyval[1]
147
+
148
+ # Remove extraneous quotations around a string value.
149
+ if ("'""".Contains($val.Substring(0, 1))) {
150
+ $val = $val.Substring(1, $val.Length - 2)
151
+ }
152
+
153
+ $pyvenvConfig[$keyval[0]] = $val
154
+ Write-Verbose "Adding Key: '$($keyval[0])'='$val'"
155
+ }
156
+ }
157
+ }
158
+ return $pyvenvConfig
159
+ }
160
+
161
+
162
+ <# Begin Activate script --------------------------------------------------- #>
163
+
164
+ # Determine the containing directory of this script
165
+ $VenvExecPath = Split-Path -Parent $MyInvocation.MyCommand.Definition
166
+ $VenvExecDir = Get-Item -Path $VenvExecPath
167
+
168
+ Write-Verbose "Activation script is located in path: '$VenvExecPath'"
169
+ Write-Verbose "VenvExecDir Fullname: '$($VenvExecDir.FullName)"
170
+ Write-Verbose "VenvExecDir Name: '$($VenvExecDir.Name)"
171
+
172
+ # Set values required in priority: CmdLine, ConfigFile, Default
173
+ # First, get the location of the virtual environment, it might not be
174
+ # VenvExecDir if specified on the command line.
175
+ if ($VenvDir) {
176
+ Write-Verbose "VenvDir given as parameter, using '$VenvDir' to determine values"
177
+ }
178
+ else {
179
+ Write-Verbose "VenvDir not given as a parameter, using parent directory name as VenvDir."
180
+ $VenvDir = $VenvExecDir.Parent.FullName.TrimEnd("\\/")
181
+ Write-Verbose "VenvDir=$VenvDir"
182
+ }
183
+
184
+ # Next, read the `pyvenv.cfg` file to determine any required value such
185
+ # as `prompt`.
186
+ $pyvenvCfg = Get-PyVenvConfig -ConfigDir $VenvDir
187
+
188
+ # Next, set the prompt from the command line, or the config file, or
189
+ # just use the name of the virtual environment folder.
190
+ if ($Prompt) {
191
+ Write-Verbose "Prompt specified as argument, using '$Prompt'"
192
+ }
193
+ else {
194
+ Write-Verbose "Prompt not specified as argument to script, checking pyvenv.cfg value"
195
+ if ($pyvenvCfg -and $pyvenvCfg['prompt']) {
196
+ Write-Verbose " Setting based on value in pyvenv.cfg='$($pyvenvCfg['prompt'])'"
197
+ $Prompt = $pyvenvCfg['prompt'];
198
+ }
199
+ else {
200
+ Write-Verbose " Setting prompt based on parent's directory's name. (Is the directory name passed to venv module when creating the virtual environment)"
201
+ Write-Verbose " Got leaf-name of $VenvDir='$(Split-Path -Path $venvDir -Leaf)'"
202
+ $Prompt = Split-Path -Path $venvDir -Leaf
203
+ }
204
+ }
205
+
206
+ Write-Verbose "Prompt = '$Prompt'"
207
+ Write-Verbose "VenvDir='$VenvDir'"
208
+
209
+ # Deactivate any currently active virtual environment, but leave the
210
+ # deactivate function in place.
211
+ deactivate -nondestructive
212
+
213
+ # Now set the environment variable VIRTUAL_ENV, used by many tools to determine
214
+ # that there is an activated venv.
215
+ $env:VIRTUAL_ENV = $VenvDir
216
+
217
+ if (-not $Env:VIRTUAL_ENV_DISABLE_PROMPT) {
218
+
219
+ Write-Verbose "Setting prompt to '$Prompt'"
220
+
221
+ # Set the prompt to include the env name
222
+ # Make sure _OLD_VIRTUAL_PROMPT is global
223
+ function global:_OLD_VIRTUAL_PROMPT { "" }
224
+ Copy-Item -Path function:prompt -Destination function:_OLD_VIRTUAL_PROMPT
225
+ New-Variable -Name _PYTHON_VENV_PROMPT_PREFIX -Description "Python virtual environment prompt prefix" -Scope Global -Option ReadOnly -Visibility Public -Value $Prompt
226
+
227
+ function global:prompt {
228
+ Write-Host -NoNewline -ForegroundColor Green "($_PYTHON_VENV_PROMPT_PREFIX) "
229
+ _OLD_VIRTUAL_PROMPT
230
+ }
231
+ }
232
+
233
+ # Clear PYTHONHOME
234
+ if (Test-Path -Path Env:PYTHONHOME) {
235
+ Copy-Item -Path Env:PYTHONHOME -Destination Env:_OLD_VIRTUAL_PYTHONHOME
236
+ Remove-Item -Path Env:PYTHONHOME
237
+ }
238
+
239
+ # Add the venv to the PATH
240
+ Copy-Item -Path Env:PATH -Destination Env:_OLD_VIRTUAL_PATH
241
+ $Env:PATH = "$VenvExecDir$([System.IO.Path]::PathSeparator)$Env:PATH"
242
+
243
+ # SIG # Begin signature block
244
+ # MIIkCQYJKoZIhvcNAQcCoIIj+jCCI/YCAQExDzANBglghkgBZQMEAgEFADB5Bgor
245
+ # BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
246
+ # KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCD50itNqbOCCDp6
247
+ # 9ZnhKce5X7vV6KL67iKMbGTUZ4nf36CCDi8wggawMIIEmKADAgECAhAIrUCyYNKc
248
+ # TJ9ezam9k67ZMA0GCSqGSIb3DQEBDAUAMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQK
249
+ # EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNV
250
+ # BAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBHNDAeFw0yMTA0MjkwMDAwMDBaFw0z
251
+ # NjA0MjgyMzU5NTlaMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg
252
+ # SW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcg
253
+ # UlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw
254
+ # ggIKAoICAQDVtC9C0CiteLdd1TlZG7GIQvUzjOs9gZdwxbvEhSYwn6SOaNhc9es0
255
+ # JAfhS0/TeEP0F9ce2vnS1WcaUk8OoVf8iJnBkcyBAz5NcCRks43iCH00fUyAVxJr
256
+ # Q5qZ8sU7H/Lvy0daE6ZMswEgJfMQ04uy+wjwiuCdCcBlp/qYgEk1hz1RGeiQIXhF
257
+ # LqGfLOEYwhrMxe6TSXBCMo/7xuoc82VokaJNTIIRSFJo3hC9FFdd6BgTZcV/sk+F
258
+ # LEikVoQ11vkunKoAFdE3/hoGlMJ8yOobMubKwvSnowMOdKWvObarYBLj6Na59zHh
259
+ # 3K3kGKDYwSNHR7OhD26jq22YBoMbt2pnLdK9RBqSEIGPsDsJ18ebMlrC/2pgVItJ
260
+ # wZPt4bRc4G/rJvmM1bL5OBDm6s6R9b7T+2+TYTRcvJNFKIM2KmYoX7BzzosmJQay
261
+ # g9Rc9hUZTO1i4F4z8ujo7AqnsAMrkbI2eb73rQgedaZlzLvjSFDzd5Ea/ttQokbI
262
+ # YViY9XwCFjyDKK05huzUtw1T0PhH5nUwjewwk3YUpltLXXRhTT8SkXbev1jLchAp
263
+ # QfDVxW0mdmgRQRNYmtwmKwH0iU1Z23jPgUo+QEdfyYFQc4UQIyFZYIpkVMHMIRro
264
+ # OBl8ZhzNeDhFMJlP/2NPTLuqDQhTQXxYPUez+rbsjDIJAsxsPAxWEQIDAQABo4IB
265
+ # WTCCAVUwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUaDfg67Y7+F8Rhvv+
266
+ # YXsIiGX0TkIwHwYDVR0jBBgwFoAU7NfjgtJxXWRM3y5nP+e6mK4cD08wDgYDVR0P
267
+ # AQH/BAQDAgGGMBMGA1UdJQQMMAoGCCsGAQUFBwMDMHcGCCsGAQUFBwEBBGswaTAk
268
+ # BggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEEGCCsGAQUFBzAC
269
+ # hjVodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9v
270
+ # dEc0LmNydDBDBgNVHR8EPDA6MDigNqA0hjJodHRwOi8vY3JsMy5kaWdpY2VydC5j
271
+ # b20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNybDAcBgNVHSAEFTATMAcGBWeBDAED
272
+ # MAgGBmeBDAEEATANBgkqhkiG9w0BAQwFAAOCAgEAOiNEPY0Idu6PvDqZ01bgAhql
273
+ # +Eg08yy25nRm95RysQDKr2wwJxMSnpBEn0v9nqN8JtU3vDpdSG2V1T9J9Ce7FoFF
274
+ # UP2cvbaF4HZ+N3HLIvdaqpDP9ZNq4+sg0dVQeYiaiorBtr2hSBh+3NiAGhEZGM1h
275
+ # mYFW9snjdufE5BtfQ/g+lP92OT2e1JnPSt0o618moZVYSNUa/tcnP/2Q0XaG3Ryw
276
+ # YFzzDaju4ImhvTnhOE7abrs2nfvlIVNaw8rpavGiPttDuDPITzgUkpn13c5Ubdld
277
+ # AhQfQDN8A+KVssIhdXNSy0bYxDQcoqVLjc1vdjcshT8azibpGL6QB7BDf5WIIIJw
278
+ # 8MzK7/0pNVwfiThV9zeKiwmhywvpMRr/LhlcOXHhvpynCgbWJme3kuZOX956rEnP
279
+ # LqR0kq3bPKSchh/jwVYbKyP/j7XqiHtwa+aguv06P0WmxOgWkVKLQcBIhEuWTatE
280
+ # QOON8BUozu3xGFYHKi8QxAwIZDwzj64ojDzLj4gLDb879M4ee47vtevLt/B3E+bn
281
+ # KD+sEq6lLyJsQfmCXBVmzGwOysWGw/YmMwwHS6DTBwJqakAwSEs0qFEgu60bhQji
282
+ # WQ1tygVQK+pKHJ6l/aCnHwZ05/LWUpD9r4VIIflXO7ScA+2GRfS0YW6/aOImYIbq
283
+ # yK+p/pQd52MbOoZWeE4wggd3MIIFX6ADAgECAhAHHxQbizANJfMU6yMM0NHdMA0G
284
+ # CSqGSIb3DQEBCwUAMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg
285
+ # SW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcg
286
+ # UlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwHhcNMjIwMTE3MDAwMDAwWhcNMjUwMTE1
287
+ # MjM1OTU5WjB8MQswCQYDVQQGEwJVUzEPMA0GA1UECBMGT3JlZ29uMRIwEAYDVQQH
288
+ # EwlCZWF2ZXJ0b24xIzAhBgNVBAoTGlB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9u
289
+ # MSMwIQYDVQQDExpQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbjCCAiIwDQYJKoZI
290
+ # hvcNAQEBBQADggIPADCCAgoCggIBAKgc0BTT+iKbtK6f2mr9pNMUTcAJxKdsuOiS
291
+ # YgDFfwhjQy89koM7uP+QV/gwx8MzEt3c9tLJvDccVWQ8H7mVsk/K+X+IufBLCgUi
292
+ # 0GGAZUegEAeRlSXxxhYScr818ma8EvGIZdiSOhqjYc4KnfgfIS4RLtZSrDFG2tN1
293
+ # 6yS8skFa3IHyvWdbD9PvZ4iYNAS4pjYDRjT/9uzPZ4Pan+53xZIcDgjiTwOh8VGu
294
+ # ppxcia6a7xCyKoOAGjvCyQsj5223v1/Ig7Dp9mGI+nh1E3IwmyTIIuVHyK6Lqu35
295
+ # 2diDY+iCMpk9ZanmSjmB+GMVs+H/gOiofjjtf6oz0ki3rb7sQ8fTnonIL9dyGTJ0
296
+ # ZFYKeb6BLA66d2GALwxZhLe5WH4Np9HcyXHACkppsE6ynYjTOd7+jN1PRJahN1oE
297
+ # RzTzEiV6nCO1M3U1HbPTGyq52IMFSBM2/07WTJSbOeXjvYR7aUxK9/ZkJiacl2iZ
298
+ # I7IWe7JKhHohqKuceQNyOzxTakLcRkzynvIrk33R9YVqtB4L6wtFxhUjvDnQg16x
299
+ # ot2KVPdfyPAWd81wtZADmrUtsZ9qG79x1hBdyOl4vUtVPECuyhCxaw+faVjumapP
300
+ # Unwo8ygflJJ74J+BYxf6UuD7m8yzsfXWkdv52DjL74TxzuFTLHPyARWCSCAbzn3Z
301
+ # Ily+qIqDAgMBAAGjggIGMIICAjAfBgNVHSMEGDAWgBRoN+Drtjv4XxGG+/5hewiI
302
+ # ZfROQjAdBgNVHQ4EFgQUt/1Teh2XDuUj2WW3siYWJgkZHA8wDgYDVR0PAQH/BAQD
303
+ # AgeAMBMGA1UdJQQMMAoGCCsGAQUFBwMDMIG1BgNVHR8Ega0wgaowU6BRoE+GTWh0
304
+ # dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRHNENvZGVTaWdu
305
+ # aW5nUlNBNDA5NlNIQTM4NDIwMjFDQTEuY3JsMFOgUaBPhk1odHRwOi8vY3JsNC5k
306
+ # aWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkRzRDb2RlU2lnbmluZ1JTQTQwOTZT
307
+ # SEEzODQyMDIxQ0ExLmNybDA+BgNVHSAENzA1MDMGBmeBDAEEATApMCcGCCsGAQUF
308
+ # BwIBFhtodHRwOi8vd3d3LmRpZ2ljZXJ0LmNvbS9DUFMwgZQGCCsGAQUFBwEBBIGH
309
+ # MIGEMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2VydC5jb20wXAYIKwYB
310
+ # BQUHMAKGUGh0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0
311
+ # ZWRHNENvZGVTaWduaW5nUlNBNDA5NlNIQTM4NDIwMjFDQTEuY3J0MAwGA1UdEwEB
312
+ # /wQCMAAwDQYJKoZIhvcNAQELBQADggIBABxv4AeV/5ltkELHSC63fXAFYS5tadcW
313
+ # TiNc2rskrNLrfH1Ns0vgSZFoQxYBFKI159E8oQQ1SKbTEubZ/B9kmHPhprHya08+
314
+ # VVzxC88pOEvz68nA82oEM09584aILqYmj8Pj7h/kmZNzuEL7WiwFa/U1hX+XiWfL
315
+ # IJQsAHBla0i7QRF2de8/VSF0XXFa2kBQ6aiTsiLyKPNbaNtbcucaUdn6vVUS5izW
316
+ # OXM95BSkFSKdE45Oq3FForNJXjBvSCpwcP36WklaHL+aHu1upIhCTUkzTHMh8b86
317
+ # WmjRUqbrnvdyR2ydI5l1OqcMBjkpPpIV6wcc+KY/RH2xvVuuoHjlUjwq2bHiNoX+
318
+ # W1scCpnA8YTs2d50jDHUgwUo+ciwpffH0Riq132NFmrH3r67VaN3TuBxjI8SIZM5
319
+ # 8WEDkbeoriDk3hxU8ZWV7b8AW6oyVBGfM06UgkfMb58h+tJPrFx8VI/WLq1dTqMf
320
+ # ZOm5cuclMnUHs2uqrRNtnV8UfidPBL4ZHkTcClQbCoz0UbLhkiDvIS00Dn+BBcxw
321
+ # /TKqVL4Oaz3bkMSsM46LciTeucHY9ExRVt3zy7i149sd+F4QozPqn7FrSVHXmem3
322
+ # r7bjyHTxOgqxRCVa18Vtx7P/8bYSBeS+WHCKcliFCecspusCDSlnRUjZwyPdP0VH
323
+ # xaZg2unjHY3rMYIVMDCCFSwCAQEwfTBpMQswCQYDVQQGEwJVUzEXMBUGA1UEChMO
324
+ # RGlnaUNlcnQsIEluYy4xQTA/BgNVBAMTOERpZ2lDZXJ0IFRydXN0ZWQgRzQgQ29k
325
+ # ZSBTaWduaW5nIFJTQTQwOTYgU0hBMzg0IDIwMjEgQ0ExAhAHHxQbizANJfMU6yMM
326
+ # 0NHdMA0GCWCGSAFlAwQCAQUAoIHOMBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEE
327
+ # MBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEVMC8GCSqGSIb3DQEJBDEiBCBW
328
+ # STMEpY5oTqEtnhE8rXHTfUpY7MZMEfDbBKbS1J0cLTBiBgorBgEEAYI3AgEMMVQw
329
+ # UqBQgE4AQgB1AGkAbAB0ADoAIABSAGUAbABlAGEAcwBlAF8AbQBhAGkAbgBfAHYA
330
+ # MwAuADkALgAxADMAXwAyADAAMgAyADAANQAxADcALgAwADIwDQYJKoZIhvcNAQEB
331
+ # BQAEggIAZ20aZkGkTuZACtVG89TVf+3Nw7cpJO4pkpM71AFEX7/TZ4NjeFMHCrEr
332
+ # g8kNhN1UNcf0FGKplenCcykaIYUTlYgT3VCOeRGINOmySIotyEfYw4HapwNhj8/G
333
+ # CK/XOKJvIZ96yHHkpaiCOx3JDVtX5UjkChX1IJNECy0RyzALQA9U/EQl7v8oNEs6
334
+ # mCHRfPflHgkPYUPYUJXAGk3tD0ZgeeomUR0zm6Zmvqar2RJaZADtCF5OxOcFbdui
335
+ # 9yrlbSlkxv6gSW60W372FRCIoy1BML7Okjv7QJnhJkPIAs4sb0ZCV3rB6ZjKBXx3
336
+ # WzeQ5yjpJ3O1ZsZKPP4XVayPJCv2PSRd8dlDgmJtMbN2gvjsLtOkDKN03jnEsiiX
337
+ # 9IeYu7AaDdDeMDW8U5A0HYStrVX7OYpLqojtWOdeIz3/thj9ncWDio4KqEZTud37
338
+ # kfhDQPks9zWHoeI8MnjWMgBCEMskNFQnEhgGNlxWRW8bzypODhlrUGB271/6tFCE
339
+ # UW24irgtfCvNVmQh5E7V+GNplFujgCa7O4wQvYBb1i2OnQ+igJkfWx2N+wmb8QYE
340
+ # mN4RM/bk/SOc1b3MnU/ztqscOPPllmQsqMe/8LW77Ww2fy3i88RlcjweWiTs+3AK
341
+ # akFenQ/OzGPTrG8+mMKEjRKuxKyL2uZRKUoZ2zVlmjEddgnIVCWhghGzMIIRrwYK
342
+ # KwYBBAGCNwMDATGCEZ8wghGbBgkqhkiG9w0BBwKgghGMMIIRiAIBAzEPMA0GCWCG
343
+ # SAFlAwQCAQUAMHgGCyqGSIb3DQEJEAEEoGkEZzBlAgEBBglghkgBhv1sBwEwMTAN
344
+ # BglghkgBZQMEAgEFAAQgnT/1Hedipjs4jpirOCgW93RhvoYu0jJ5WKO7Y0LYfrYC
345
+ # EQDwVmhL49/+ciLQ3plX3i8KGA8yMDIyMDUxNzE2NDQyNVqggg18MIIGxjCCBK6g
346
+ # AwIBAgIQCnpKiJ7JmUKQBmM4TYaXnTANBgkqhkiG9w0BAQsFADBjMQswCQYDVQQG
347
+ # EwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xOzA5BgNVBAMTMkRpZ2lDZXJ0
348
+ # IFRydXN0ZWQgRzQgUlNBNDA5NiBTSEEyNTYgVGltZVN0YW1waW5nIENBMB4XDTIy
349
+ # MDMyOTAwMDAwMFoXDTMzMDMxNDIzNTk1OVowTDELMAkGA1UEBhMCVVMxFzAVBgNV
350
+ # BAoTDkRpZ2lDZXJ0LCBJbmMuMSQwIgYDVQQDExtEaWdpQ2VydCBUaW1lc3RhbXAg
351
+ # MjAyMiAtIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC5KpYjply8
352
+ # X9ZJ8BWCGPQz7sxcbOPgJS7SMeQ8QK77q8TjeF1+XDbq9SWNQ6OB6zhj+TyIad48
353
+ # 0jBRDTEHukZu6aNLSOiJQX8Nstb5hPGYPgu/CoQScWyhYiYB087DbP2sO37cKhyp
354
+ # vTDGFtjavOuy8YPRn80JxblBakVCI0Fa+GDTZSw+fl69lqfw/LH09CjPQnkfO8eT
355
+ # B2ho5UQ0Ul8PUN7UWSxEdMAyRxlb4pguj9DKP//GZ888k5VOhOl2GJiZERTFKwyg
356
+ # M9tNJIXogpThLwPuf4UCyYbh1RgUtwRF8+A4vaK9enGY7BXn/S7s0psAiqwdjTuA
357
+ # aP7QWZgmzuDtrn8oLsKe4AtLyAjRMruD+iM82f/SjLv3QyPf58NaBWJ+cCzlK7I9
358
+ # Y+rIroEga0OJyH5fsBrdGb2fdEEKr7mOCdN0oS+wVHbBkE+U7IZh/9sRL5IDMM4w
359
+ # t4sPXUSzQx0jUM2R1y+d+/zNscGnxA7E70A+GToC1DGpaaBJ+XXhm+ho5GoMj+vk
360
+ # sSF7hmdYfn8f6CvkFLIW1oGhytowkGvub3XAsDYmsgg7/72+f2wTGN/GbaR5Sa2L
361
+ # f2GHBWj31HDjQpXonrubS7LitkE956+nGijJrWGwoEEYGU7tR5thle0+C2Fa6j56
362
+ # mJJRzT/JROeAiylCcvd5st2E6ifu/n16awIDAQABo4IBizCCAYcwDgYDVR0PAQH/
363
+ # BAQDAgeAMAwGA1UdEwEB/wQCMAAwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwgwIAYD
364
+ # VR0gBBkwFzAIBgZngQwBBAIwCwYJYIZIAYb9bAcBMB8GA1UdIwQYMBaAFLoW2W1N
365
+ # hS9zKXaaL3WMaiCPnshvMB0GA1UdDgQWBBSNZLeJIf5WWESEYafqbxw2j92vDTBa
366
+ # BgNVHR8EUzBRME+gTaBLhklodHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNl
367
+ # cnRUcnVzdGVkRzRSU0E0MDk2U0hBMjU2VGltZVN0YW1waW5nQ0EuY3JsMIGQBggr
368
+ # BgEFBQcBAQSBgzCBgDAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQu
369
+ # Y29tMFgGCCsGAQUFBzAChkxodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGln
370
+ # aUNlcnRUcnVzdGVkRzRSU0E0MDk2U0hBMjU2VGltZVN0YW1waW5nQ0EuY3J0MA0G
371
+ # CSqGSIb3DQEBCwUAA4ICAQANLSN0ptH1+OpLmT8B5PYM5K8WndmzjJeCKZxDbwEt
372
+ # qzi1cBG/hBmLP13lhk++kzreKjlaOU7YhFmlvBuYquhs79FIaRk4W8+JOR1wcNlO
373
+ # 3yMibNXf9lnLocLqTHbKodyhK5a4m1WpGmt90fUCCU+C1qVziMSYgN/uSZW3s8zF
374
+ # p+4O4e8eOIqf7xHJMUpYtt84fMv6XPfkU79uCnx+196Y1SlliQ+inMBl9AEiZcfq
375
+ # XnSmWzWSUHz0F6aHZE8+RokWYyBry/J70DXjSnBIqbbnHWC9BCIVJXAGcqlEO2lH
376
+ # EdPu6cegPk8QuTA25POqaQmoi35komWUEftuMvH1uzitzcCTEdUyeEpLNypM81zc
377
+ # toXAu3AwVXjWmP5UbX9xqUgaeN1Gdy4besAzivhKKIwSqHPPLfnTI/KeGeANlCig
378
+ # 69saUaCVgo4oa6TOnXbeqXOqSGpZQ65f6vgPBkKd3wZolv4qoHRbY2beayy4eKpN
379
+ # cG3wLPEHFX41tOa1DKKZpdcVazUOhdbgLMzgDCS4fFILHpl878jIxYxYaa+rPeHP
380
+ # zH0VrhS/inHfypex2EfqHIXgRU4SHBQpWMxv03/LvsEOSm8gnK7ZczJZCOctkqEa
381
+ # Ef4ymKZdK5fgi9OczG21Da5HYzhHF1tvE9pqEG4fSbdEW7QICodaWQR2EaGndwIT
382
+ # HDCCBq4wggSWoAMCAQICEAc2N7ckVHzYR6z9KGYqXlswDQYJKoZIhvcNAQELBQAw
383
+ # YjELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQ
384
+ # d3d3LmRpZ2ljZXJ0LmNvbTEhMB8GA1UEAxMYRGlnaUNlcnQgVHJ1c3RlZCBSb290
385
+ # IEc0MB4XDTIyMDMyMzAwMDAwMFoXDTM3MDMyMjIzNTk1OVowYzELMAkGA1UEBhMC
386
+ # VVMxFzAVBgNVBAoTDkRpZ2lDZXJ0LCBJbmMuMTswOQYDVQQDEzJEaWdpQ2VydCBU
387
+ # cnVzdGVkIEc0IFJTQTQwOTYgU0hBMjU2IFRpbWVTdGFtcGluZyBDQTCCAiIwDQYJ
388
+ # KoZIhvcNAQEBBQADggIPADCCAgoCggIBAMaGNQZJs8E9cklRVcclA8TykTepl1Gh
389
+ # 1tKD0Z5Mom2gsMyD+Vr2EaFEFUJfpIjzaPp985yJC3+dH54PMx9QEwsmc5Zt+Feo
390
+ # An39Q7SE2hHxc7Gz7iuAhIoiGN/r2j3EF3+rGSs+QtxnjupRPfDWVtTnKC3r07G1
391
+ # decfBmWNlCnT2exp39mQh0YAe9tEQYncfGpXevA3eZ9drMvohGS0UvJ2R/dhgxnd
392
+ # X7RUCyFobjchu0CsX7LeSn3O9TkSZ+8OpWNs5KbFHc02DVzV5huowWR0QKfAcsW6
393
+ # Th+xtVhNef7Xj3OTrCw54qVI1vCwMROpVymWJy71h6aPTnYVVSZwmCZ/oBpHIEPj
394
+ # Q2OAe3VuJyWQmDo4EbP29p7mO1vsgd4iFNmCKseSv6De4z6ic/rnH1pslPJSlREr
395
+ # WHRAKKtzQ87fSqEcazjFKfPKqpZzQmiftkaznTqj1QPgv/CiPMpC3BhIfxQ0z9JM
396
+ # q++bPf4OuGQq+nUoJEHtQr8FnGZJUlD0UfM2SU2LINIsVzV5K6jzRWC8I41Y99xh
397
+ # 3pP+OcD5sjClTNfpmEpYPtMDiP6zj9NeS3YSUZPJjAw7W4oiqMEmCPkUEBIDfV8j
398
+ # u2TjY+Cm4T72wnSyPx4JduyrXUZ14mCjWAkBKAAOhFTuzuldyF4wEr1GnrXTdrnS
399
+ # DmuZDNIztM2xAgMBAAGjggFdMIIBWTASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1Ud
400
+ # DgQWBBS6FtltTYUvcyl2mi91jGogj57IbzAfBgNVHSMEGDAWgBTs1+OC0nFdZEzf
401
+ # Lmc/57qYrhwPTzAOBgNVHQ8BAf8EBAMCAYYwEwYDVR0lBAwwCgYIKwYBBQUHAwgw
402
+ # dwYIKwYBBQUHAQEEazBpMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2Vy
403
+ # dC5jb20wQQYIKwYBBQUHMAKGNWh0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9E
404
+ # aWdpQ2VydFRydXN0ZWRSb290RzQuY3J0MEMGA1UdHwQ8MDowOKA2oDSGMmh0dHA6
405
+ # Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRSb290RzQuY3JsMCAG
406
+ # A1UdIAQZMBcwCAYGZ4EMAQQCMAsGCWCGSAGG/WwHATANBgkqhkiG9w0BAQsFAAOC
407
+ # AgEAfVmOwJO2b5ipRCIBfmbW2CFC4bAYLhBNE88wU86/GPvHUF3iSyn7cIoNqilp
408
+ # /GnBzx0H6T5gyNgL5Vxb122H+oQgJTQxZ822EpZvxFBMYh0MCIKoFr2pVs8Vc40B
409
+ # IiXOlWk/R3f7cnQU1/+rT4osequFzUNf7WC2qk+RZp4snuCKrOX9jLxkJodskr2d
410
+ # fNBwCnzvqLx1T7pa96kQsl3p/yhUifDVinF2ZdrM8HKjI/rAJ4JErpknG6skHibB
411
+ # t94q6/aesXmZgaNWhqsKRcnfxI2g55j7+6adcq/Ex8HBanHZxhOACcS2n82HhyS7
412
+ # T6NJuXdmkfFynOlLAlKnN36TU6w7HQhJD5TNOXrd/yVjmScsPT9rp/Fmw0HNT7ZA
413
+ # myEhQNC3EyTN3B14OuSereU0cZLXJmvkOHOrpgFPvT87eK1MrfvElXvtCl8zOYdB
414
+ # eHo46Zzh3SP9HSjTx/no8Zhf+yvYfvJGnXUsHicsJttvFXseGYs2uJPU5vIXmVnK
415
+ # cPA3v5gA3yAWTyf7YGcWoWa63VXAOimGsJigK+2VQbc61RWYMbRiCQ8KvYHZE/6/
416
+ # pNHzV9m8BPqC3jLfBInwAM1dwvnQI38AC+R2AibZ8GV2QqYphwlHK+Z/GqSFD/yY
417
+ # lvZVVCsfgPrA8g4r5db7qS9EFUrnEw4d2zc4GqEr9u3WfPwxggN2MIIDcgIBATB3
418
+ # MGMxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjE7MDkGA1UE
419
+ # AxMyRGlnaUNlcnQgVHJ1c3RlZCBHNCBSU0E0MDk2IFNIQTI1NiBUaW1lU3RhbXBp
420
+ # bmcgQ0ECEAp6SoieyZlCkAZjOE2Gl50wDQYJYIZIAWUDBAIBBQCggdEwGgYJKoZI
421
+ # hvcNAQkDMQ0GCyqGSIb3DQEJEAEEMBwGCSqGSIb3DQEJBTEPFw0yMjA1MTcxNjQ0
422
+ # MjVaMCsGCyqGSIb3DQEJEAIMMRwwGjAYMBYEFIUI84ZRXLPTB322tLfAfxtKXkHe
423
+ # MC8GCSqGSIb3DQEJBDEiBCD6nFFQEG6P9dJgqwYWRs4qcIuEc8WzVzP/ANrLjNw9
424
+ # 9DA3BgsqhkiG9w0BCRACLzEoMCYwJDAiBCCdppAVw0nGwYl4Rbo1gq1wyI+kKTvb
425
+ # ar6cK9JTknnmOzANBgkqhkiG9w0BAQEFAASCAgAw6wjOhvvgNacByXWLXEcHuoRB
426
+ # hCB6I/ZNStOapAzlidSg0ccPO4QsS5L78/ff+DCa4ZFu//T2wfORd9wCt9NpL0XT
427
+ # 7/zVF3zw16aNIn1W9gbJkjPfHGLImV30M/PzMnzlj3m9ybK0W/vvu8SmNpMrsSKI
428
+ # sR1/nSzaA+Y0FmOOy2jtf7MtZeVh8o4ZkgBVPgVLpRSr4SJXzadMjQjshWII2ujM
429
+ # v2YPK7qczQmXaonfN+rAkPxLS+3MVDgoUKAGvQBpm686eDkImZ0qTG+Qi6+Z+2id
430
+ # QXv8h4V4L7Ln37RNsm4j5carTNxTx6b0SZPreswMEFfUwtHeaSWvUIKRzyY0t3O/
431
+ # NT5G8RSxtJLqTMVFWcmlbgaXo7/PDsA7hs1XQJE3UJnfRNrcznnHgYJPuW737A9Q
432
+ # v4sFjmov5/F4qUbYIh5yE8ec4IhOuR0rTEgDJLcU67KdrLjcePMlIlbPaArw1vn3
433
+ # On862t4jYz5aj3YaaHYzXB6VxiMp9JN5B3e4gmix/8TgN9kNmvbVwODfK5hfaPcY
434
+ # QXkTBySKKoRz+eyz67IBXPCHDYXtiXdaqvhWPFn+YbFH9jlEqPP2ATzqEz/ibgDZ
435
+ # 0YyvPy8vnItbUwPuGTVjwU0VmF0m5pSHm/pPALd1xKiMF+eZq580lbrIoUeyZ5mP
436
+ # 0XyrSEj88tBJMxcKZA==
437
+ # SIG # End signature block
MLPY/Scripts/__pycache__/pywin32_postinstall.cpython-39.pyc ADDED
Binary file (16.6 kB). View file
 
MLPY/Scripts/__pycache__/pywin32_testall.cpython-39.pyc ADDED
Binary file (2.99 kB). View file
 
MLPY/Scripts/activate ADDED
@@ -0,0 +1,66 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # This file must be used with "source bin/activate" *from bash*
2
+ # you cannot run it directly
3
+
4
+ deactivate () {
5
+ # reset old environment variables
6
+ if [ -n "${_OLD_VIRTUAL_PATH:-}" ] ; then
7
+ PATH="${_OLD_VIRTUAL_PATH:-}"
8
+ export PATH
9
+ unset _OLD_VIRTUAL_PATH
10
+ fi
11
+ if [ -n "${_OLD_VIRTUAL_PYTHONHOME:-}" ] ; then
12
+ PYTHONHOME="${_OLD_VIRTUAL_PYTHONHOME:-}"
13
+ export PYTHONHOME
14
+ unset _OLD_VIRTUAL_PYTHONHOME
15
+ fi
16
+
17
+ # This should detect bash and zsh, which have a hash command that must
18
+ # be called to get it to forget past commands. Without forgetting
19
+ # past commands the $PATH changes we made may not be respected
20
+ if [ -n "${BASH:-}" -o -n "${ZSH_VERSION:-}" ] ; then
21
+ hash -r 2> /dev/null
22
+ fi
23
+
24
+ if [ -n "${_OLD_VIRTUAL_PS1:-}" ] ; then
25
+ PS1="${_OLD_VIRTUAL_PS1:-}"
26
+ export PS1
27
+ unset _OLD_VIRTUAL_PS1
28
+ fi
29
+
30
+ unset VIRTUAL_ENV
31
+ if [ ! "${1:-}" = "nondestructive" ] ; then
32
+ # Self destruct!
33
+ unset -f deactivate
34
+ fi
35
+ }
36
+
37
+ # unset irrelevant variables
38
+ deactivate nondestructive
39
+
40
+ VIRTUAL_ENV="D:\DoorMan\MLPY"
41
+ export VIRTUAL_ENV
42
+
43
+ _OLD_VIRTUAL_PATH="$PATH"
44
+ PATH="$VIRTUAL_ENV/Scripts:$PATH"
45
+ export PATH
46
+
47
+ # unset PYTHONHOME if set
48
+ # this will fail if PYTHONHOME is set to the empty string (which is bad anyway)
49
+ # could use `if (set -u; : $PYTHONHOME) ;` in bash
50
+ if [ -n "${PYTHONHOME:-}" ] ; then
51
+ _OLD_VIRTUAL_PYTHONHOME="${PYTHONHOME:-}"
52
+ unset PYTHONHOME
53
+ fi
54
+
55
+ if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT:-}" ] ; then
56
+ _OLD_VIRTUAL_PS1="${PS1:-}"
57
+ PS1="(MLPY) ${PS1:-}"
58
+ export PS1
59
+ fi
60
+
61
+ # This should detect bash and zsh, which have a hash command that must
62
+ # be called to get it to forget past commands. Without forgetting
63
+ # past commands the $PATH changes we made may not be respected
64
+ if [ -n "${BASH:-}" -o -n "${ZSH_VERSION:-}" ] ; then
65
+ hash -r 2> /dev/null
66
+ fi
MLPY/Scripts/activate.bat ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ @echo off
2
+
3
+ rem This file is UTF-8 encoded, so we need to update the current code page while executing it
4
+ for /f "tokens=2 delims=:." %%a in ('"%SystemRoot%\System32\chcp.com"') do (
5
+ set _OLD_CODEPAGE=%%a
6
+ )
7
+ if defined _OLD_CODEPAGE (
8
+ "%SystemRoot%\System32\chcp.com" 65001 > nul
9
+ )
10
+
11
+ set VIRTUAL_ENV=D:\DoorMan\MLPY
12
+
13
+ if not defined PROMPT set PROMPT=$P$G
14
+
15
+ if defined _OLD_VIRTUAL_PROMPT set PROMPT=%_OLD_VIRTUAL_PROMPT%
16
+ if defined _OLD_VIRTUAL_PYTHONHOME set PYTHONHOME=%_OLD_VIRTUAL_PYTHONHOME%
17
+
18
+ set _OLD_VIRTUAL_PROMPT=%PROMPT%
19
+ set PROMPT=(MLPY) %PROMPT%
20
+
21
+ if defined PYTHONHOME set _OLD_VIRTUAL_PYTHONHOME=%PYTHONHOME%
22
+ set PYTHONHOME=
23
+
24
+ if defined _OLD_VIRTUAL_PATH set PATH=%_OLD_VIRTUAL_PATH%
25
+ if not defined _OLD_VIRTUAL_PATH set _OLD_VIRTUAL_PATH=%PATH%
26
+
27
+ set PATH=%VIRTUAL_ENV%\Scripts;%PATH%
28
+
29
+ :END
30
+ if defined _OLD_CODEPAGE (
31
+ "%SystemRoot%\System32\chcp.com" %_OLD_CODEPAGE% > nul
32
+ set _OLD_CODEPAGE=
33
+ )
MLPY/Scripts/backend-test-tools.exe ADDED
Binary file (108 kB). View file
 
MLPY/Scripts/check-model.exe ADDED
Binary file (108 kB). View file
 
MLPY/Scripts/check-node.exe ADDED
Binary file (108 kB). View file
 
MLPY/Scripts/convert-caffe2-to-onnx.exe ADDED
Binary file (108 kB). View file
 
MLPY/Scripts/convert-onnx-to-caffe2.exe ADDED
Binary file (108 kB). View file
 
MLPY/Scripts/deactivate.bat ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ @echo off
2
+
3
+ if defined _OLD_VIRTUAL_PROMPT (
4
+ set "PROMPT=%_OLD_VIRTUAL_PROMPT%"
5
+ )
6
+ set _OLD_VIRTUAL_PROMPT=
7
+
8
+ if defined _OLD_VIRTUAL_PYTHONHOME (
9
+ set "PYTHONHOME=%_OLD_VIRTUAL_PYTHONHOME%"
10
+ set _OLD_VIRTUAL_PYTHONHOME=
11
+ )
12
+
13
+ if defined _OLD_VIRTUAL_PATH (
14
+ set "PATH=%_OLD_VIRTUAL_PATH%"
15
+ )
16
+
17
+ set _OLD_VIRTUAL_PATH=
18
+
19
+ set VIRTUAL_ENV=
20
+
21
+ :END
MLPY/Scripts/f2py.exe ADDED
Binary file (108 kB). View file
 
MLPY/Scripts/isympy.exe ADDED
Binary file (108 kB). View file
 
MLPY/Scripts/markdown_py.exe ADDED
Binary file (108 kB). View file
 
MLPY/Scripts/mlagents-learn.exe ADDED
Binary file (108 kB). View file
 
MLPY/Scripts/mlagents-run-experiment.exe ADDED
Binary file (108 kB). View file
 
MLPY/Scripts/pip.exe ADDED
Binary file (108 kB). View file
 
MLPY/Scripts/pip3.9.exe ADDED
Binary file (108 kB). View file
 
MLPY/Scripts/pip3.exe ADDED
Binary file (108 kB). View file
 
MLPY/Scripts/python.exe ADDED
Binary file (599 kB). View file
 
MLPY/Scripts/pythonw.exe ADDED
Binary file (599 kB). View file
 
MLPY/Scripts/pywin32_postinstall.py ADDED
@@ -0,0 +1,783 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # postinstall script for pywin32
2
+ #
3
+ # copies PyWinTypesxx.dll and PythonCOMxx.dll into the system directory,
4
+ # and creates a pth file
5
+ import glob
6
+ import os
7
+ import shutil
8
+ import sys
9
+ import sysconfig
10
+
11
+ try:
12
+ import winreg as winreg
13
+ except:
14
+ import winreg
15
+
16
+ # Send output somewhere so it can be found if necessary...
17
+ import tempfile
18
+
19
+ tee_f = open(os.path.join(tempfile.gettempdir(), "pywin32_postinstall.log"), "w")
20
+
21
+
22
+ class Tee:
23
+ def __init__(self, file):
24
+ self.f = file
25
+
26
+ def write(self, what):
27
+ if self.f is not None:
28
+ try:
29
+ self.f.write(what.replace("\n", "\r\n"))
30
+ except IOError:
31
+ pass
32
+ tee_f.write(what)
33
+
34
+ def flush(self):
35
+ if self.f is not None:
36
+ try:
37
+ self.f.flush()
38
+ except IOError:
39
+ pass
40
+ tee_f.flush()
41
+
42
+
43
+ # For some unknown reason, when running under bdist_wininst we will start up
44
+ # with sys.stdout as None but stderr is hooked up. This work-around allows
45
+ # bdist_wininst to see the output we write and display it at the end of
46
+ # the install.
47
+ if sys.stdout is None:
48
+ sys.stdout = sys.stderr
49
+
50
+ sys.stderr = Tee(sys.stderr)
51
+ sys.stdout = Tee(sys.stdout)
52
+
53
+ com_modules = [
54
+ # module_name, class_names
55
+ ("win32com.servers.interp", "Interpreter"),
56
+ ("win32com.servers.dictionary", "DictionaryPolicy"),
57
+ ("win32com.axscript.client.pyscript", "PyScript"),
58
+ ]
59
+
60
+ # Is this a 'silent' install - ie, avoid all dialogs.
61
+ # Different than 'verbose'
62
+ silent = 0
63
+
64
+ # Verbosity of output messages.
65
+ verbose = 1
66
+
67
+ root_key_name = "Software\\Python\\PythonCore\\" + sys.winver
68
+
69
+ try:
70
+ # When this script is run from inside the bdist_wininst installer,
71
+ # file_created() and directory_created() are additional builtin
72
+ # functions which write lines to Python23\pywin32-install.log. This is
73
+ # a list of actions for the uninstaller, the format is inspired by what
74
+ # the Wise installer also creates.
75
+ file_created
76
+ is_bdist_wininst = True
77
+ except NameError:
78
+ is_bdist_wininst = False # we know what it is not - but not what it is :)
79
+
80
+ def file_created(file):
81
+ pass
82
+
83
+ def directory_created(directory):
84
+ pass
85
+
86
+ def get_root_hkey():
87
+ try:
88
+ winreg.OpenKey(
89
+ winreg.HKEY_LOCAL_MACHINE, root_key_name, 0, winreg.KEY_CREATE_SUB_KEY
90
+ )
91
+ return winreg.HKEY_LOCAL_MACHINE
92
+ except OSError:
93
+ # Either not exist, or no permissions to create subkey means
94
+ # must be HKCU
95
+ return winreg.HKEY_CURRENT_USER
96
+
97
+
98
+ try:
99
+ create_shortcut
100
+ except NameError:
101
+ # Create a function with the same signature as create_shortcut provided
102
+ # by bdist_wininst
103
+ def create_shortcut(
104
+ path, description, filename, arguments="", workdir="", iconpath="", iconindex=0
105
+ ):
106
+ import pythoncom
107
+ from win32com.shell import shell
108
+
109
+ ilink = pythoncom.CoCreateInstance(
110
+ shell.CLSID_ShellLink,
111
+ None,
112
+ pythoncom.CLSCTX_INPROC_SERVER,
113
+ shell.IID_IShellLink,
114
+ )
115
+ ilink.SetPath(path)
116
+ ilink.SetDescription(description)
117
+ if arguments:
118
+ ilink.SetArguments(arguments)
119
+ if workdir:
120
+ ilink.SetWorkingDirectory(workdir)
121
+ if iconpath or iconindex:
122
+ ilink.SetIconLocation(iconpath, iconindex)
123
+ # now save it.
124
+ ipf = ilink.QueryInterface(pythoncom.IID_IPersistFile)
125
+ ipf.Save(filename, 0)
126
+
127
+ # Support the same list of "path names" as bdist_wininst.
128
+ def get_special_folder_path(path_name):
129
+ from win32com.shell import shell, shellcon
130
+
131
+ for maybe in """
132
+ CSIDL_COMMON_STARTMENU CSIDL_STARTMENU CSIDL_COMMON_APPDATA
133
+ CSIDL_LOCAL_APPDATA CSIDL_APPDATA CSIDL_COMMON_DESKTOPDIRECTORY
134
+ CSIDL_DESKTOPDIRECTORY CSIDL_COMMON_STARTUP CSIDL_STARTUP
135
+ CSIDL_COMMON_PROGRAMS CSIDL_PROGRAMS CSIDL_PROGRAM_FILES_COMMON
136
+ CSIDL_PROGRAM_FILES CSIDL_FONTS""".split():
137
+ if maybe == path_name:
138
+ csidl = getattr(shellcon, maybe)
139
+ return shell.SHGetSpecialFolderPath(0, csidl, False)
140
+ raise ValueError("%s is an unknown path ID" % (path_name,))
141
+
142
+
143
+ def CopyTo(desc, src, dest):
144
+ import win32api
145
+ import win32con
146
+
147
+ while 1:
148
+ try:
149
+ win32api.CopyFile(src, dest, 0)
150
+ return
151
+ except win32api.error as details:
152
+ if details.winerror == 5: # access denied - user not admin.
153
+ raise
154
+ if silent:
155
+ # Running silent mode - just re-raise the error.
156
+ raise
157
+ full_desc = (
158
+ "Error %s\n\n"
159
+ "If you have any Python applications running, "
160
+ "please close them now\nand select 'Retry'\n\n%s"
161
+ % (desc, details.strerror)
162
+ )
163
+ rc = win32api.MessageBox(
164
+ 0, full_desc, "Installation Error", win32con.MB_ABORTRETRYIGNORE
165
+ )
166
+ if rc == win32con.IDABORT:
167
+ raise
168
+ elif rc == win32con.IDIGNORE:
169
+ return
170
+ # else retry - around we go again.
171
+
172
+
173
+ # We need to import win32api to determine the Windows system directory,
174
+ # so we can copy our system files there - but importing win32api will
175
+ # load the pywintypes.dll already in the system directory preventing us
176
+ # from updating them!
177
+ # So, we pull the same trick pywintypes.py does, but it loads from
178
+ # our pywintypes_system32 directory.
179
+ def LoadSystemModule(lib_dir, modname):
180
+ # See if this is a debug build.
181
+ import importlib.machinery
182
+ import importlib.util
183
+
184
+ suffix = "_d" if "_d.pyd" in importlib.machinery.EXTENSION_SUFFIXES else ""
185
+ filename = "%s%d%d%s.dll" % (
186
+ modname,
187
+ sys.version_info[0],
188
+ sys.version_info[1],
189
+ suffix,
190
+ )
191
+ filename = os.path.join(lib_dir, "pywin32_system32", filename)
192
+ loader = importlib.machinery.ExtensionFileLoader(modname, filename)
193
+ spec = importlib.machinery.ModuleSpec(name=modname, loader=loader, origin=filename)
194
+ mod = importlib.util.module_from_spec(spec)
195
+ spec.loader.exec_module(mod)
196
+
197
+
198
+ def SetPyKeyVal(key_name, value_name, value):
199
+ root_hkey = get_root_hkey()
200
+ root_key = winreg.OpenKey(root_hkey, root_key_name)
201
+ try:
202
+ my_key = winreg.CreateKey(root_key, key_name)
203
+ try:
204
+ winreg.SetValueEx(my_key, value_name, 0, winreg.REG_SZ, value)
205
+ if verbose:
206
+ print("-> %s\\%s[%s]=%r" % (root_key_name, key_name, value_name, value))
207
+ finally:
208
+ my_key.Close()
209
+ finally:
210
+ root_key.Close()
211
+
212
+
213
+ def UnsetPyKeyVal(key_name, value_name, delete_key=False):
214
+ root_hkey = get_root_hkey()
215
+ root_key = winreg.OpenKey(root_hkey, root_key_name)
216
+ try:
217
+ my_key = winreg.OpenKey(root_key, key_name, 0, winreg.KEY_SET_VALUE)
218
+ try:
219
+ winreg.DeleteValue(my_key, value_name)
220
+ if verbose:
221
+ print("-> DELETE %s\\%s[%s]" % (root_key_name, key_name, value_name))
222
+ finally:
223
+ my_key.Close()
224
+ if delete_key:
225
+ winreg.DeleteKey(root_key, key_name)
226
+ if verbose:
227
+ print("-> DELETE %s\\%s" % (root_key_name, key_name))
228
+ except OSError as why:
229
+ winerror = getattr(why, "winerror", why.errno)
230
+ if winerror != 2: # file not found
231
+ raise
232
+ finally:
233
+ root_key.Close()
234
+
235
+
236
+ def RegisterCOMObjects(register=True):
237
+ import win32com.server.register
238
+
239
+ if register:
240
+ func = win32com.server.register.RegisterClasses
241
+ else:
242
+ func = win32com.server.register.UnregisterClasses
243
+ flags = {}
244
+ if not verbose:
245
+ flags["quiet"] = 1
246
+ for module, klass_name in com_modules:
247
+ __import__(module)
248
+ mod = sys.modules[module]
249
+ flags["finalize_register"] = getattr(mod, "DllRegisterServer", None)
250
+ flags["finalize_unregister"] = getattr(mod, "DllUnregisterServer", None)
251
+ klass = getattr(mod, klass_name)
252
+ func(klass, **flags)
253
+
254
+
255
+ def RegisterHelpFile(register=True, lib_dir=None):
256
+ if lib_dir is None:
257
+ lib_dir = sysconfig.get_paths()["platlib"]
258
+ if register:
259
+ # Register the .chm help file.
260
+ chm_file = os.path.join(lib_dir, "PyWin32.chm")
261
+ if os.path.isfile(chm_file):
262
+ # This isn't recursive, so if 'Help' doesn't exist, we croak
263
+ SetPyKeyVal("Help", None, None)
264
+ SetPyKeyVal("Help\\Pythonwin Reference", None, chm_file)
265
+ return chm_file
266
+ else:
267
+ print("NOTE: PyWin32.chm can not be located, so has not " "been registered")
268
+ else:
269
+ UnsetPyKeyVal("Help\\Pythonwin Reference", None, delete_key=True)
270
+ return None
271
+
272
+
273
+ def RegisterPythonwin(register=True, lib_dir=None):
274
+ """Add (or remove) Pythonwin to context menu for python scripts.
275
+ ??? Should probably also add Edit command for pys files also.
276
+ Also need to remove these keys on uninstall, but there's no function
277
+ like file_created to add registry entries to uninstall log ???
278
+ """
279
+ import os
280
+
281
+ if lib_dir is None:
282
+ lib_dir = sysconfig.get_paths()["platlib"]
283
+ classes_root = get_root_hkey()
284
+ ## Installer executable doesn't seem to pass anything to postinstall script indicating if it's a debug build,
285
+ pythonwin_exe = os.path.join(lib_dir, "Pythonwin", "Pythonwin.exe")
286
+ pythonwin_edit_command = pythonwin_exe + ' -edit "%1"'
287
+
288
+ keys_vals = [
289
+ (
290
+ "Software\\Microsoft\\Windows\\CurrentVersion\\App Paths\\Pythonwin.exe",
291
+ "",
292
+ pythonwin_exe,
293
+ ),
294
+ (
295
+ "Software\\Classes\\Python.File\\shell\\Edit with Pythonwin",
296
+ "command",
297
+ pythonwin_edit_command,
298
+ ),
299
+ (
300
+ "Software\\Classes\\Python.NoConFile\\shell\\Edit with Pythonwin",
301
+ "command",
302
+ pythonwin_edit_command,
303
+ ),
304
+ ]
305
+
306
+ try:
307
+ if register:
308
+ for key, sub_key, val in keys_vals:
309
+ ## Since winreg only uses the character Api functions, this can fail if Python
310
+ ## is installed to a path containing non-ascii characters
311
+ hkey = winreg.CreateKey(classes_root, key)
312
+ if sub_key:
313
+ hkey = winreg.CreateKey(hkey, sub_key)
314
+ winreg.SetValueEx(hkey, None, 0, winreg.REG_SZ, val)
315
+ hkey.Close()
316
+ else:
317
+ for key, sub_key, val in keys_vals:
318
+ try:
319
+ if sub_key:
320
+ hkey = winreg.OpenKey(classes_root, key)
321
+ winreg.DeleteKey(hkey, sub_key)
322
+ hkey.Close()
323
+ winreg.DeleteKey(classes_root, key)
324
+ except OSError as why:
325
+ winerror = getattr(why, "winerror", why.errno)
326
+ if winerror != 2: # file not found
327
+ raise
328
+ finally:
329
+ # tell windows about the change
330
+ from win32com.shell import shell, shellcon
331
+
332
+ shell.SHChangeNotify(
333
+ shellcon.SHCNE_ASSOCCHANGED, shellcon.SHCNF_IDLIST, None, None
334
+ )
335
+
336
+
337
+ def get_shortcuts_folder():
338
+ if get_root_hkey() == winreg.HKEY_LOCAL_MACHINE:
339
+ try:
340
+ fldr = get_special_folder_path("CSIDL_COMMON_PROGRAMS")
341
+ except OSError:
342
+ # No CSIDL_COMMON_PROGRAMS on this platform
343
+ fldr = get_special_folder_path("CSIDL_PROGRAMS")
344
+ else:
345
+ # non-admin install - always goes in this user's start menu.
346
+ fldr = get_special_folder_path("CSIDL_PROGRAMS")
347
+
348
+ try:
349
+ install_group = winreg.QueryValue(
350
+ get_root_hkey(), root_key_name + "\\InstallPath\\InstallGroup"
351
+ )
352
+ except OSError:
353
+ vi = sys.version_info
354
+ install_group = "Python %d.%d" % (vi[0], vi[1])
355
+ return os.path.join(fldr, install_group)
356
+
357
+
358
+ # Get the system directory, which may be the Wow64 directory if we are a 32bit
359
+ # python on a 64bit OS.
360
+ def get_system_dir():
361
+ import win32api # we assume this exists.
362
+
363
+ try:
364
+ import pythoncom
365
+ import win32process
366
+ from win32com.shell import shell, shellcon
367
+
368
+ try:
369
+ if win32process.IsWow64Process():
370
+ return shell.SHGetSpecialFolderPath(0, shellcon.CSIDL_SYSTEMX86)
371
+ return shell.SHGetSpecialFolderPath(0, shellcon.CSIDL_SYSTEM)
372
+ except (pythoncom.com_error, win32process.error):
373
+ return win32api.GetSystemDirectory()
374
+ except ImportError:
375
+ return win32api.GetSystemDirectory()
376
+
377
+
378
+ def fixup_dbi():
379
+ # We used to have a dbi.pyd with our .pyd files, but now have a .py file.
380
+ # If the user didn't uninstall, they will find the .pyd which will cause
381
+ # problems - so handle that.
382
+ import win32api
383
+ import win32con
384
+
385
+ pyd_name = os.path.join(os.path.dirname(win32api.__file__), "dbi.pyd")
386
+ pyd_d_name = os.path.join(os.path.dirname(win32api.__file__), "dbi_d.pyd")
387
+ py_name = os.path.join(os.path.dirname(win32con.__file__), "dbi.py")
388
+ for this_pyd in (pyd_name, pyd_d_name):
389
+ this_dest = this_pyd + ".old"
390
+ if os.path.isfile(this_pyd) and os.path.isfile(py_name):
391
+ try:
392
+ if os.path.isfile(this_dest):
393
+ print(
394
+ "Old dbi '%s' already exists - deleting '%s'"
395
+ % (this_dest, this_pyd)
396
+ )
397
+ os.remove(this_pyd)
398
+ else:
399
+ os.rename(this_pyd, this_dest)
400
+ print("renamed '%s'->'%s.old'" % (this_pyd, this_pyd))
401
+ file_created(this_pyd + ".old")
402
+ except os.error as exc:
403
+ print("FAILED to rename '%s': %s" % (this_pyd, exc))
404
+
405
+
406
+ def install(lib_dir):
407
+ import traceback
408
+
409
+ # The .pth file is now installed as a regular file.
410
+ # Create the .pth file in the site-packages dir, and use only relative paths
411
+ # We used to write a .pth directly to sys.prefix - clobber it.
412
+ if os.path.isfile(os.path.join(sys.prefix, "pywin32.pth")):
413
+ os.unlink(os.path.join(sys.prefix, "pywin32.pth"))
414
+ # The .pth may be new and therefore not loaded in this session.
415
+ # Setup the paths just in case.
416
+ for name in "win32 win32\\lib Pythonwin".split():
417
+ sys.path.append(os.path.join(lib_dir, name))
418
+ # It is possible people with old versions installed with still have
419
+ # pywintypes and pythoncom registered. We no longer need this, and stale
420
+ # entries hurt us.
421
+ for name in "pythoncom pywintypes".split():
422
+ keyname = "Software\\Python\\PythonCore\\" + sys.winver + "\\Modules\\" + name
423
+ for root in winreg.HKEY_LOCAL_MACHINE, winreg.HKEY_CURRENT_USER:
424
+ try:
425
+ winreg.DeleteKey(root, keyname + "\\Debug")
426
+ except WindowsError:
427
+ pass
428
+ try:
429
+ winreg.DeleteKey(root, keyname)
430
+ except WindowsError:
431
+ pass
432
+ LoadSystemModule(lib_dir, "pywintypes")
433
+ LoadSystemModule(lib_dir, "pythoncom")
434
+ import win32api
435
+
436
+ # and now we can get the system directory:
437
+ files = glob.glob(os.path.join(lib_dir, "pywin32_system32\\*.*"))
438
+ if not files:
439
+ raise RuntimeError("No system files to copy!!")
440
+ # Try the system32 directory first - if that fails due to "access denied",
441
+ # it implies a non-admin user, and we use sys.prefix
442
+ for dest_dir in [get_system_dir(), sys.prefix]:
443
+ # and copy some files over there
444
+ worked = 0
445
+ try:
446
+ for fname in files:
447
+ base = os.path.basename(fname)
448
+ dst = os.path.join(dest_dir, base)
449
+ CopyTo("installing %s" % base, fname, dst)
450
+ if verbose:
451
+ print("Copied %s to %s" % (base, dst))
452
+ # Register the files with the uninstaller
453
+ file_created(dst)
454
+ worked = 1
455
+ # Nuke any other versions that may exist - having
456
+ # duplicates causes major headaches.
457
+ bad_dest_dirs = [
458
+ os.path.join(sys.prefix, "Library\\bin"),
459
+ os.path.join(sys.prefix, "Lib\\site-packages\\win32"),
460
+ ]
461
+ if dest_dir != sys.prefix:
462
+ bad_dest_dirs.append(sys.prefix)
463
+ for bad_dest_dir in bad_dest_dirs:
464
+ bad_fname = os.path.join(bad_dest_dir, base)
465
+ if os.path.exists(bad_fname):
466
+ # let exceptions go here - delete must succeed
467
+ os.unlink(bad_fname)
468
+ if worked:
469
+ break
470
+ except win32api.error as details:
471
+ if details.winerror == 5:
472
+ # access denied - user not admin - try sys.prefix dir,
473
+ # but first check that a version doesn't already exist
474
+ # in that place - otherwise that one will still get used!
475
+ if os.path.exists(dst):
476
+ msg = (
477
+ "The file '%s' exists, but can not be replaced "
478
+ "due to insufficient permissions. You must "
479
+ "reinstall this software as an Administrator" % dst
480
+ )
481
+ print(msg)
482
+ raise RuntimeError(msg)
483
+ continue
484
+ raise
485
+ else:
486
+ raise RuntimeError(
487
+ "You don't have enough permissions to install the system files"
488
+ )
489
+
490
+ # Pythonwin 'compiles' config files - record them for uninstall.
491
+ pywin_dir = os.path.join(lib_dir, "Pythonwin", "pywin")
492
+ for fname in glob.glob(os.path.join(pywin_dir, "*.cfg")):
493
+ file_created(fname[:-1] + "c") # .cfg->.cfc
494
+
495
+ # Register our demo COM objects.
496
+ try:
497
+ try:
498
+ RegisterCOMObjects()
499
+ except win32api.error as details:
500
+ if details.winerror != 5: # ERROR_ACCESS_DENIED
501
+ raise
502
+ print("You do not have the permissions to install COM objects.")
503
+ print("The sample COM objects were not registered.")
504
+ except Exception:
505
+ print("FAILED to register the Python COM objects")
506
+ traceback.print_exc()
507
+
508
+ # There may be no main Python key in HKCU if, eg, an admin installed
509
+ # python itself.
510
+ winreg.CreateKey(get_root_hkey(), root_key_name)
511
+
512
+ chm_file = None
513
+ try:
514
+ chm_file = RegisterHelpFile(True, lib_dir)
515
+ except Exception:
516
+ print("Failed to register help file")
517
+ traceback.print_exc()
518
+ else:
519
+ if verbose:
520
+ print("Registered help file")
521
+
522
+ # misc other fixups.
523
+ fixup_dbi()
524
+
525
+ # Register Pythonwin in context menu
526
+ try:
527
+ RegisterPythonwin(True, lib_dir)
528
+ except Exception:
529
+ print("Failed to register pythonwin as editor")
530
+ traceback.print_exc()
531
+ else:
532
+ if verbose:
533
+ print("Pythonwin has been registered in context menu")
534
+
535
+ # Create the win32com\gen_py directory.
536
+ make_dir = os.path.join(lib_dir, "win32com", "gen_py")
537
+ if not os.path.isdir(make_dir):
538
+ if verbose:
539
+ print("Creating directory %s" % (make_dir,))
540
+ directory_created(make_dir)
541
+ os.mkdir(make_dir)
542
+
543
+ try:
544
+ # create shortcuts
545
+ # CSIDL_COMMON_PROGRAMS only available works on NT/2000/XP, and
546
+ # will fail there if the user has no admin rights.
547
+ fldr = get_shortcuts_folder()
548
+ # If the group doesn't exist, then we don't make shortcuts - its
549
+ # possible that this isn't a "normal" install.
550
+ if os.path.isdir(fldr):
551
+ dst = os.path.join(fldr, "PythonWin.lnk")
552
+ create_shortcut(
553
+ os.path.join(lib_dir, "Pythonwin\\Pythonwin.exe"),
554
+ "The Pythonwin IDE",
555
+ dst,
556
+ "",
557
+ sys.prefix,
558
+ )
559
+ file_created(dst)
560
+ if verbose:
561
+ print("Shortcut for Pythonwin created")
562
+ # And the docs.
563
+ if chm_file:
564
+ dst = os.path.join(fldr, "Python for Windows Documentation.lnk")
565
+ doc = "Documentation for the PyWin32 extensions"
566
+ create_shortcut(chm_file, doc, dst)
567
+ file_created(dst)
568
+ if verbose:
569
+ print("Shortcut to documentation created")
570
+ else:
571
+ if verbose:
572
+ print("Can't install shortcuts - %r is not a folder" % (fldr,))
573
+ except Exception as details:
574
+ print(details)
575
+
576
+ # importing win32com.client ensures the gen_py dir created - not strictly
577
+ # necessary to do now, but this makes the installation "complete"
578
+ try:
579
+ import win32com.client # noqa
580
+ except ImportError:
581
+ # Don't let this error sound fatal
582
+ pass
583
+ print("The pywin32 extensions were successfully installed.")
584
+
585
+ if is_bdist_wininst:
586
+ # Open a web page with info about the .exe installers being deprecated.
587
+ import webbrowser
588
+
589
+ try:
590
+ webbrowser.open("https://mhammond.github.io/pywin32_installers.html")
591
+ except webbrowser.Error:
592
+ print("Please visit https://mhammond.github.io/pywin32_installers.html")
593
+
594
+
595
+ def uninstall(lib_dir):
596
+ # First ensure our system modules are loaded from pywin32_system, so
597
+ # we can remove the ones we copied...
598
+ LoadSystemModule(lib_dir, "pywintypes")
599
+ LoadSystemModule(lib_dir, "pythoncom")
600
+
601
+ try:
602
+ RegisterCOMObjects(False)
603
+ except Exception as why:
604
+ print("Failed to unregister COM objects: %s" % (why,))
605
+
606
+ try:
607
+ RegisterHelpFile(False, lib_dir)
608
+ except Exception as why:
609
+ print("Failed to unregister help file: %s" % (why,))
610
+ else:
611
+ if verbose:
612
+ print("Unregistered help file")
613
+
614
+ try:
615
+ RegisterPythonwin(False, lib_dir)
616
+ except Exception as why:
617
+ print("Failed to unregister Pythonwin: %s" % (why,))
618
+ else:
619
+ if verbose:
620
+ print("Unregistered Pythonwin")
621
+
622
+ try:
623
+ # remove gen_py directory.
624
+ gen_dir = os.path.join(lib_dir, "win32com", "gen_py")
625
+ if os.path.isdir(gen_dir):
626
+ shutil.rmtree(gen_dir)
627
+ if verbose:
628
+ print("Removed directory %s" % (gen_dir,))
629
+
630
+ # Remove pythonwin compiled "config" files.
631
+ pywin_dir = os.path.join(lib_dir, "Pythonwin", "pywin")
632
+ for fname in glob.glob(os.path.join(pywin_dir, "*.cfc")):
633
+ os.remove(fname)
634
+
635
+ # The dbi.pyd.old files we may have created.
636
+ try:
637
+ os.remove(os.path.join(lib_dir, "win32", "dbi.pyd.old"))
638
+ except os.error:
639
+ pass
640
+ try:
641
+ os.remove(os.path.join(lib_dir, "win32", "dbi_d.pyd.old"))
642
+ except os.error:
643
+ pass
644
+
645
+ except Exception as why:
646
+ print("Failed to remove misc files: %s" % (why,))
647
+
648
+ try:
649
+ fldr = get_shortcuts_folder()
650
+ for link in ("PythonWin.lnk", "Python for Windows Documentation.lnk"):
651
+ fqlink = os.path.join(fldr, link)
652
+ if os.path.isfile(fqlink):
653
+ os.remove(fqlink)
654
+ if verbose:
655
+ print("Removed %s" % (link,))
656
+ except Exception as why:
657
+ print("Failed to remove shortcuts: %s" % (why,))
658
+ # Now remove the system32 files.
659
+ files = glob.glob(os.path.join(lib_dir, "pywin32_system32\\*.*"))
660
+ # Try the system32 directory first - if that fails due to "access denied",
661
+ # it implies a non-admin user, and we use sys.prefix
662
+ try:
663
+ for dest_dir in [get_system_dir(), sys.prefix]:
664
+ # and copy some files over there
665
+ worked = 0
666
+ for fname in files:
667
+ base = os.path.basename(fname)
668
+ dst = os.path.join(dest_dir, base)
669
+ if os.path.isfile(dst):
670
+ try:
671
+ os.remove(dst)
672
+ worked = 1
673
+ if verbose:
674
+ print("Removed file %s" % (dst))
675
+ except Exception:
676
+ print("FAILED to remove %s" % (dst,))
677
+ if worked:
678
+ break
679
+ except Exception as why:
680
+ print("FAILED to remove system files: %s" % (why,))
681
+
682
+
683
+ # NOTE: If this script is run from inside the bdist_wininst created
684
+ # binary installer or uninstaller, the command line args are either
685
+ # '-install' or '-remove'.
686
+
687
+ # Important: From inside the binary installer this script MUST NOT
688
+ # call sys.exit() or raise SystemExit, otherwise not only this script
689
+ # but also the installer will terminate! (Is there a way to prevent
690
+ # this from the bdist_wininst C code?)
691
+
692
+
693
+ def verify_destination(location):
694
+ if not os.path.isdir(location):
695
+ raise argparse.ArgumentTypeError('Path "{}" does not exist!'.format(location))
696
+ return location
697
+
698
+
699
+ def main():
700
+ import argparse
701
+
702
+ parser = argparse.ArgumentParser(
703
+ formatter_class=argparse.RawDescriptionHelpFormatter,
704
+ description="""A post-install script for the pywin32 extensions.
705
+
706
+ * Typical usage:
707
+
708
+ > python pywin32_postinstall.py -install
709
+
710
+ If you installed pywin32 via a .exe installer, this should be run
711
+ automatically after installation, but if it fails you can run it again.
712
+
713
+ If you installed pywin32 via PIP, you almost certainly need to run this to
714
+ setup the environment correctly.
715
+
716
+ Execute with script with a '-install' parameter, to ensure the environment
717
+ is setup correctly.
718
+ """,
719
+ )
720
+ parser.add_argument(
721
+ "-install",
722
+ default=False,
723
+ action="store_true",
724
+ help="Configure the Python environment correctly for pywin32.",
725
+ )
726
+ parser.add_argument(
727
+ "-remove",
728
+ default=False,
729
+ action="store_true",
730
+ help="Try and remove everything that was installed or copied.",
731
+ )
732
+ parser.add_argument(
733
+ "-wait",
734
+ type=int,
735
+ help="Wait for the specified process to terminate before starting.",
736
+ )
737
+ parser.add_argument(
738
+ "-silent",
739
+ default=False,
740
+ action="store_true",
741
+ help='Don\'t display the "Abort/Retry/Ignore" dialog for files in use.',
742
+ )
743
+ parser.add_argument(
744
+ "-quiet",
745
+ default=False,
746
+ action="store_true",
747
+ help="Don't display progress messages.",
748
+ )
749
+ parser.add_argument(
750
+ "-destination",
751
+ default=sysconfig.get_paths()["platlib"],
752
+ type=verify_destination,
753
+ help="Location of the PyWin32 installation",
754
+ )
755
+
756
+ args = parser.parse_args()
757
+
758
+ if not args.quiet:
759
+ print("Parsed arguments are: {}".format(args))
760
+
761
+ if not args.install ^ args.remove:
762
+ parser.error("You need to either choose to -install or -remove!")
763
+
764
+ if args.wait is not None:
765
+ try:
766
+ os.waitpid(args.wait, 0)
767
+ except os.error:
768
+ # child already dead
769
+ pass
770
+
771
+ silent = args.silent
772
+ verbose = not args.quiet
773
+
774
+ if args.install:
775
+ install(args.destination)
776
+
777
+ if args.remove:
778
+ if not is_bdist_wininst:
779
+ uninstall(args.destination)
780
+
781
+
782
+ if __name__ == "__main__":
783
+ main()
MLPY/Scripts/pywin32_testall.py ADDED
@@ -0,0 +1,124 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """A test runner for pywin32"""
2
+ import os
3
+ import site
4
+ import subprocess
5
+ import sys
6
+
7
+ # locate the dirs based on where this script is - it may be either in the
8
+ # source tree, or in an installed Python 'Scripts' tree.
9
+ this_dir = os.path.dirname(__file__)
10
+ site_packages = [
11
+ site.getusersitepackages(),
12
+ ] + site.getsitepackages()
13
+
14
+ failures = []
15
+
16
+
17
+ # Run a test using subprocess and wait for the result.
18
+ # If we get an returncode != 0, we know that there was an error, but we don't
19
+ # abort immediately - we run as many tests as we can.
20
+ def run_test(script, cmdline_extras):
21
+ dirname, scriptname = os.path.split(script)
22
+ # some tests prefer to be run from their directory.
23
+ cmd = [sys.executable, "-u", scriptname] + cmdline_extras
24
+ print("--- Running '%s' ---" % script)
25
+ sys.stdout.flush()
26
+ result = subprocess.run(cmd, check=False, cwd=dirname)
27
+ print("*** Test script '%s' exited with %s" % (script, result.returncode))
28
+ sys.stdout.flush()
29
+ if result.returncode:
30
+ failures.append(script)
31
+
32
+
33
+ def find_and_run(possible_locations, extras):
34
+ for maybe in possible_locations:
35
+ if os.path.isfile(maybe):
36
+ run_test(maybe, extras)
37
+ break
38
+ else:
39
+ raise RuntimeError(
40
+ "Failed to locate a test script in one of %s" % possible_locations
41
+ )
42
+
43
+
44
+ def main():
45
+ import argparse
46
+
47
+ code_directories = [this_dir] + site_packages
48
+
49
+ parser = argparse.ArgumentParser(
50
+ description="A script to trigger tests in all subprojects of PyWin32."
51
+ )
52
+ parser.add_argument(
53
+ "-no-user-interaction",
54
+ default=False,
55
+ action="store_true",
56
+ help="(This is now the default - use `-user-interaction` to include them)",
57
+ )
58
+
59
+ parser.add_argument(
60
+ "-user-interaction",
61
+ action="store_true",
62
+ help="Include tests which require user interaction",
63
+ )
64
+
65
+ parser.add_argument(
66
+ "-skip-adodbapi",
67
+ default=False,
68
+ action="store_true",
69
+ help="Skip the adodbapi tests; useful for CI where there's no provider",
70
+ )
71
+
72
+ args, remains = parser.parse_known_args()
73
+
74
+ # win32, win32ui / Pythonwin
75
+
76
+ extras = []
77
+ if args.user_interaction:
78
+ extras += ["-user-interaction"]
79
+ extras.extend(remains)
80
+ scripts = [
81
+ "win32/test/testall.py",
82
+ "Pythonwin/pywin/test/all.py",
83
+ ]
84
+ for script in scripts:
85
+ maybes = [os.path.join(directory, script) for directory in code_directories]
86
+ find_and_run(maybes, extras)
87
+
88
+ # win32com
89
+ maybes = [
90
+ os.path.join(directory, "win32com", "test", "testall.py")
91
+ for directory in [
92
+ os.path.join(this_dir, "com"),
93
+ ]
94
+ + site_packages
95
+ ]
96
+ extras = remains + ["1"] # only run "level 1" tests in CI
97
+ find_and_run(maybes, extras)
98
+
99
+ # adodbapi
100
+ if not args.skip_adodbapi:
101
+ maybes = [
102
+ os.path.join(directory, "adodbapi", "test", "adodbapitest.py")
103
+ for directory in code_directories
104
+ ]
105
+ find_and_run(maybes, remains)
106
+ # This script has a hard-coded sql server name in it, (and markh typically
107
+ # doesn't have a different server to test on) but there is now supposed to be a server out there on the Internet
108
+ # just to run these tests, so try it...
109
+ maybes = [
110
+ os.path.join(directory, "adodbapi", "test", "test_adodbapi_dbapi20.py")
111
+ for directory in code_directories
112
+ ]
113
+ find_and_run(maybes, remains)
114
+
115
+ if failures:
116
+ print("The following scripts failed")
117
+ for failure in failures:
118
+ print(">", failure)
119
+ sys.exit(1)
120
+ print("All tests passed \\o/")
121
+
122
+
123
+ if __name__ == "__main__":
124
+ main()
MLPY/Scripts/tensorboard.exe ADDED
Binary file (108 kB). View file
 
MLPY/Scripts/torchrun.exe ADDED
Binary file (108 kB). View file