pymol-open-source
pymol-open-source copied to clipboard
SSL module not available on Windows bundle
I just downloaded PyMOL for Windows from http://pymol.org but the environment miss the SSL module.
It was tried on Linux and Mac also and the environment is alright.
EDIT: this render the pip
unusable on Windows.
Hi Pedro - does it work if you first activate the conda environment? The bundle contains a Conda-Prompt.bat
launcher, can you try that?
EDIT: FYI, activating the environment will add Library\bin
to %PATH%
which I think is the relevant piece to get the ssl library working.
I'm executing in a plugin:
subprocess.check_call([sys.executable, '-m', 'pip', 'install', 'mypackage'])
Because is a subprocess it inherit the environment including any conda changes to environment variables. If PyMOL runs on an environemnt the subprocess should handle it.
And yes, launching Conda-Prompt.bat
would work like a charm.
I don't know what pymolwin.exe
does but activates the environment. Here is the os.environ of my fellow's PyMOL, it is activated:
environ({
'ALLUSERSPROFILE':
'C:\\ProgramData',
'APPDATA':
'C:\\Users\\Kleit\\AppData\\Roaming',
'COMMONPROGRAMFILES':
'C:\\Program Files\\Common Files',
'COMMONPROGRAMFILES(X86)':
'C:\\Program Files (x86)\\Common Files',
'COMMONPROGRAMW6432':
'C:\\Program Files\\Common Files',
'COMPUTERNAME':
'LAPTOP-SI48LT9L',
'COMSPEC':
'C:\\Windows\\system32\\cmd.exe',
'DRIVERDATA':
'C:\\Windows\\System32\\Drivers\\DriverData',
'FPS_BROWSER_APP_PROFILE_STRING':
'Internet Explorer',
'FPS_BROWSER_USER_PROFILE_STRING':
'Default',
'HOMEDRIVE':
'C:',
'HOMEPATH':
'\\Users\\Kleit',
'LOCALAPPDATA':
'C:\\Users\\Kleit\\AppData\\Local',
'LOGONSERVER':
'\\\\LAPTOP-SI48LT9L',
'NUMBER_OF_PROCESSORS':
'4',
'ONEDRIVE':
'C:\\Users\\Kleit\\OneDrive',
'ONEDRIVECONSUMER':
'C:\\Users\\Kleit\\OneDrive',
'OS':
'Windows_NT',
'PATH':
'C:\\Users\\Kleit\\PyMOL\\Scripts;C:\\Users\\Kleit\\PyMOL\\Library\\bin;C:\\Users\\Kleit\\PyMOL;C:\\Windows\\system32;C:\\Windows;C:\\Windows\\System32\\Wbem;C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\;C:\\Windows\\System32\\OpenSSH\\;C:\\Users\\Kleit\\AppData\\Local\\Programs\\Python\\Python38-32\\Scripts\\;C:\\Users\\Kleit\\AppData\\Local\\Programs\\Python\\Python38-32\\;C:\\Users\\Kleit\\AppData\\Local\\Microsoft\\WindowsApps;',
'PATHEXT':
'.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC',
'PROCESSOR_ARCHITECTURE':
'AMD64',
'PROCESSOR_IDENTIFIER':
'Intel64 Family 6 Model 142 Stepping 9, GenuineIntel',
'PROCESSOR_LEVEL':
'6',
'PROCESSOR_REVISION':
'8e09',
'PROGRAMDATA':
'C:\\ProgramData',
'PROGRAMFILES':
'C:\\Program Files',
'PROGRAMFILES(X86)':
'C:\\Program Files (x86)',
'PROGRAMW6432':
'C:\\Program Files',
'PSMODULEPATH':
'C:\\Program Files\\WindowsPowerShell\\Modules;C:\\Windows\\system32\\WindowsPowerShell\\v1.0\\Modules',
'PUBLIC':
'C:\\Users\\Public',
'SESSIONNAME':
'Console',
'SYSTEMDRIVE':
'C:',
'SYSTEMROOT':
'C:\\Windows',
'TEMP':
'C:\\Users\\Kleit\\AppData\\Local\\Temp',
'TMP':
'C:\\Users\\Kleit\\AppData\\Local\\Temp',
'USERDOMAIN':
'LAPTOP-SI48LT9L',
'USERDOMAIN_ROAMINGPROFILE':
'LAPTOP-SI48LT9L',
'USERNAME':
'Kleit',
'USERPROFILE':
'C:\\Users\\Kleit',
'WINDIR':
'C:\\Windows',
'PYMOL_PATH':
'C:\\Users\\Kleit\\PyMOL\\share\\pymol',
'PYMOL_DATA':
'C:\\Users\\Kleit\\PyMOL\\share\\pymol\\data',
'PYMOL_SCRIPTS':
'C:\\Users\\Kleit\\PyMOL\\share\\pymol\\scripts',
'TUT':
'C:\\Users\\Kleit\\PyMOL\\share\\pymol\\data\\tut',
'CONDA_DEFAULT_ENV':
'C:\\Users\\Kleit\\PyMOL',
'SSL_CERT_FILE':
'C:\\Users\\Kleit\\PyMOL\\Library\\ssl\\cacert.pem',
'PYMOL_LICENSE_FILE':
'',
'QT_API':
'PyQt5'
})
Here the os.environ
running from inside PyMOL launched from Conda-Prompt.bat
. The previous was from pymolwin.exe
. They differ:
environ({
'ALLUSERSPROFILE':
'C:\\ProgramData',
'APPDATA':
'C:\\Users\\Kleit\\AppData\\Roaming',
'COMMONPROGRAMFILES':
'C:\\Program Files\\Common Files',
'COMMONPROGRAMFILES(X86)':
'C:\\Program Files (x86)\\Common Files',
'COMMONPROGRAMW6432':
'C:\\Program Files\\Common Files',
'COMPUTERNAME':
'LAPTOP-SI48LT9L',
'COMSPEC':
'C:\\Windows\\system32\\cmd.exe',
'CONDA_DEFAULT_ENV':
'base',
'CONDA_EXE':
'C:\\Users\\Kleit\\PyMOL\\Scripts\\conda.exe',
'CONDA_PREFIX':
'C:\\Users\\Kleit\\PyMOL',
'CONDA_PROMPT_MODIFIER':
'(base) ',
'CONDA_PYTHON_EXE':
'C:\\Users\\Kleit\\PyMOL\\python.exe',
'CONDA_SHLVL':
'1',
'DRIVERDATA':
'C:\\Windows\\System32\\Drivers\\DriverData',
'FPS_BROWSER_APP_PROFILE_STRING':
'Internet Explorer',
'FPS_BROWSER_USER_PROFILE_STRING':
'Default',
'HOMEDRIVE':
'C:',
'HOMEPATH':
'\\Users\\Kleit',
'LOCALAPPDATA':
'C:\\Users\\Kleit\\AppData\\Local',
'LOGONSERVER':
'\\\\LAPTOP-SI48LT9L',
'NUMBER_OF_PROCESSORS':
'4',
'ONEDRIVE':
'C:\\Users\\Kleit\\OneDrive',
'ONEDRIVECONSUMER':
'C:\\Users\\Kleit\\OneDrive',
'OS':
'Windows_NT',
'PATH':
'C:\\Users\\Kleit\\PyMOL;C:\\Users\\Kleit\\PyMOL\\Library\\mingw-w64\\bin;C:\\Users\\Kleit\\PyMOL\\Library\\usr\\bin;C:\\Users\\Kleit\\PyMOL\\Library\\bin;C:\\Users\\Kleit\\PyMOL\\Scripts;C:\\Users\\Kleit\\PyMOL\\bin;C:\\Users\\Kleit\\PyMOL\\condabin;C:\\Windows\\system32;C:\\Windows;C:\\Windows\\System32\\Wbem;C:\\Windows\\System32\\WindowsPowerShell\\v1.0;C:\\Windows\\System32\\OpenSSH;C:\\Users\\Kleit\\AppData\\Local\\Programs\\Python\\Python38-32\\Scripts;C:\\Users\\Kleit\\AppData\\Local\\Programs\\Python\\Python38-32;C:\\Users\\Kleit\\AppData\\Local\\Microsoft\\WindowsApps;.;C:\\Users\\Kleit\\PyMOL\\lib\\site-packages\\scipy\\.libs',
'PATHEXT':
'.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC',
'PROCESSOR_ARCHITECTURE':
'AMD64',
'PROCESSOR_IDENTIFIER':
'Intel64 Family 6 Model 142 Stepping 9, GenuineIntel',
'PROCESSOR_LEVEL':
'6',
'PROCESSOR_REVISION':
'8e09',
'PROGRAMDATA':
'C:\\ProgramData',
'PROGRAMFILES':
'C:\\Program Files',
'PROGRAMFILES(X86)':
'C:\\Program Files (x86)',
'PROGRAMW6432':
'C:\\Program Files',
'PROMPT':
'(base) $P$G',
'PSMODULEPATH':
'C:\\Program Files\\WindowsPowerShell\\Modules;C:\\Windows\\system32\\WindowsPowerShell\\v1.0\\Modules',
'PUBLIC':
'C:\\Users\\Public',
'SESSIONNAME':
'Console',
'SYSTEMDRIVE':
'C:',
'SYSTEMROOT':
'C:\\Windows',
'TEMP':
'C:\\Users\\Kleit\\AppData\\Local\\Temp',
'TMP':
'C:\\Users\\Kleit\\AppData\\Local\\Temp',
'USERDOMAIN':
'LAPTOP-SI48LT9L',
'USERDOMAIN_ROAMINGPROFILE':
'LAPTOP-SI48LT9L',
'USERNAME':
'Kleit',
'USERPROFILE':
'C:\\Users\\Kleit',
'WINDIR':
'C:\\Windows',
'PYMOL_PATH':
'C:\\Users\\Kleit\\PyMOL\\share\\pymol',
'PYMOL_DATA':
'C:\\Users\\Kleit\\PyMOL\\share\\pymol\\data',
'PYMOL_SCRIPTS':
'C:\\Users\\Kleit\\PyMOL\\share\\pymol\\scripts',
'TUT':
'C:\\Users\\Kleit\\PyMOL\\share\\pymol\\data\\tut',
'SSL_CERT_FILE':
'C:\\Users\\Kleit\\PyMOL\\Library\\ssl\\cacert.pem',
'PYMOL_LICENSE_FILE':
'',
'QT_API':
'PyQt5'
})
Thanks a lot @pslacerda for the env comparison.
PyMOLWin.exe is a very thin wrapper which does:
- unsetting environment variables which are known to cause problems (
TCL_LIBRARY
,PYMOL_PATH
,PYMOL_DATA
,PYTHONHOME
,QT_PLUGIN_PATH
) - call
SetDllDirectoryW(prefix + "\\Library\\bin")
which fixes conflicts with broken dlls inC:\Windows\System32
- runs either
python.exe
(console application) orpythonw.exe
(GUI application), depending whether the+2
command line flag was passed (PyMOLWinWithConsole.bat
passes+2
) - it does not fully activate the conda environment, but
Library\bin
andScripts
are added to thePATH
in a later step (which should be sufficient).
This is what I observe when trying to reproduce the issue:
- running
python -m pip ...
from plain command prompt without activating environment: SSL error: WARNING: pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available - running from activated conda prompt: success (package was installed),
but finally prints an error (EnvironmentError: RECORD.pip and RECORD are the same file)Looks like virtual drive issue - running from
PyMOLWin.exe +2
: success (same as activated conda environment) - running from
PyMOLWin.exe
: success (same as activated conda environment, but no output visible becausesys.executable
ispythonw.exe
and stdout/stderr are lost)
I'll keep digging, but so far I couldn't find why you're getting the SSL error with PyMOLWin.exe.
Didn't find anything. This code works reliably for me, no matter how PyMOL was launched:
args = ['install', 'mypackage']
import subprocess, sys
process = subprocess.Popen(
[sys.executable, '-m', 'pip', '--disable-pip-version-check'] + args,
universal_newlines=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
out, err = process.communicate()
if out:
print(out)
if err:
print(err)