pymol-open-source icon indicating copy to clipboard operation
pymol-open-source copied to clipboard

SSL module not available on Windows bundle

Open pslacerda opened this issue 4 years ago • 5 comments

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.

pslacerda avatar Mar 27 '20 13:03 pslacerda

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.

speleo3 avatar Mar 27 '20 14:03 speleo3

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'
})

pslacerda avatar Mar 27 '20 20:03 pslacerda

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'
})

pslacerda avatar Mar 28 '20 13:03 pslacerda

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 in C:\Windows\System32
  • runs either python.exe (console application) or pythonw.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 and Scripts are added to the PATH 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 because sys.executable is pythonw.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.

speleo3 avatar Mar 30 '20 15:03 speleo3

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)

speleo3 avatar Apr 07 '20 07:04 speleo3