title: Error: "Module use of python37.dll conflicts with this version of Python" when running Maya from a python3 exe subprocess
body: <p>I'm having trouble getting Maya 2020 (Python 27) to launch from my bundled .exe program (Python 37). I've used pyinstaller to bundle the exe.</p>
  
  <p>If I start my tool from an IDE it launches Maya fine. When I start my tool from the .exe I get this error for several Maya python in modules: </p>
  
  <pre><code># Error: line 1: ImportError: file C:\Program Files\Autodesk\Maya2020\bin\python27.zip\ctypes\__init__.py line 10: Module use of python37.dll conflicts with this version of Python. # 
  </code></pre>
  
  <p>I've tried the suggestions <a href="https://stackoverflow.com/questions/42107296/module-use-of-python34-dll-conflicts-with-this-version-of-python">in this post</a>, but I'm not sure what I'm doing wrong. </p>
  
  <ul>
  <li>I'm using PySide2 and Python37 in my tool</li>
  <li>I don't have any version of Python in my global PATH (I'm using virtual environments)</li>
  <li>I've tried adding a sys.insert or creating the PYTHONPATH variable and editing the environment variables during the subprocess.Popen launch, but nothing seems to work.</li>
  </ul>
  
  <p>My code is below. If it's easier I can email a zip of my setup as well:</p>
  
  <p><strong>launch_maya.py (main file):</strong></p>
  
  <pre><code>import os
  import sys
  import subprocess
  
  from PySide2 import QtWidgets
  
  
  
  class Widget(QtWidgets.QWidget):
      def __init__(self, parent=None):
          super(Widget, self).__init__(parent)
  
          # GUI
          btn_launch = QtWidgets.QPushButton('launch maya')
          btn_launch.clicked.connect(self.on_launch)
  
          # Layout
          main_layout = QtWidgets.QHBoxLayout(self)
          main_layout.addWidget(btn_launch)
          self.setLayout(main_layout)
  
          # Root path exe vs ide
          if getattr(sys, 'frozen', False):
              self.root_path = sys._MEIPASS
          else:
              self.root_path = os.path.join(os.path.dirname(os.path.realpath(__file__)))
  
      def _set_app_envs(self):
  
          _envs = os.environ.copy()
          _envs['MAYA_SCRIPT_PATH'] = os.path.join(self.root_path).replace('\\', '/')
          _envs['QT_PREFERRED_BINDING'] = 'PySide2'
  
          # Python path envs
          _python_path_list = [
              os.path.join('C:', os.sep, 'Program Files', 'Autodesk', 'Maya2020', 'bin', 'mayapy.exe'),  # insert mayapy here????
              os.path.join(self.root_path).replace('\\', '/')  # userSetup.py dir
          ]
  
          # PYTHONPATH exe vs ide
          if getattr(sys, 'frozen', False):
              # There is no PYTHONPATH to add so, so I create it here (Do I need this? Is there a diff way?)
              _envs['PYTHONPATH'] = os.pathsep + os.pathsep.join(_python_path_list)
  
          # Insert mayapy.exe into front of PATH
          sys_path_ = _envs['PATH']
          maya_py_path = os.path.join('C:', os.sep, 'Program Files', 'Autodesk', 'Maya2020', 'bin', 'mayapy.exe')
          sys_path = maya_py_path + os.pathsep + sys_path_
          _envs['PATH'] = sys_path
  
          else:
              _envs['PYTHONPATH'] += os.pathsep + os.pathsep.join(_python_path_list)
  
          # Insert mayapy???????
          # sys.path.insert(0, os.path.join('C:', os.sep, 'Program Files', 'Autodesk', 'Maya2020', 'bin', 'mayapy.exe'))
  
          return _envs
  
      def on_launch(self):
  
  
          # Maya file path
          file_path_abs = '{}/scenes/test.mb'.format(self.root_path).replace('\\', '/')
          print(file_path_abs)
          app_exe = r'C:/Program Files/Autodesk/Maya2020/bin/maya.exe'
  
          _envs = self._set_app_envs()
  
          if os.path.exists(file_path_abs):
              proc = subprocess.Popen(
                  [app_exe, file_path_abs],
                  env=_envs,
                  stdin=subprocess.PIPE,
                  stdout=subprocess.PIPE,
                  stderr=subprocess.STDOUT,
                  creationflags=subprocess.CREATE_NEW_PROCESS_GROUP
              )
  
  
  if __name__ == "__main__":
      app = QtWidgets.QApplication(sys.argv)
      window = Widget()
      window.resize(400, 400)
      window.show()
      sys.exit(app.exec_())
  </code></pre>
  
  <p><strong>userSetup.py:</strong></p>
  
  <pre><code>import os
  import maya.cmds as mc
  
  print('hey')
  def tweak_launch(*args):
  
      print('Startup sequence running...')
      os.environ['mickey'] = '--------ebae--------'
      print(os.environ['mickey'])
  
  
  mc.evalDeferred("tweak_launch()")
  </code></pre>
  
  <p><strong>bundle.spec:</strong></p>
  
  <pre><code># -*- mode: python ; coding: utf-8 -*-
  block_cipher = None
  
  added_files = [
           ('./scenes', 'scenes')
           ]
  
  a = Analysis(['launch_maya.py'],
               pathex=[
               'D:/GitStuff/mb-armada/example_files/exe_bundle',
               'D:/GitStuff/mb-armada/dependencies/Qt.py',
               'D:/GitStuff/mb-armada/venv/Lib/site-packages'
               ],
               binaries=[],
               datas=added_files,
               hiddenimports=[],
               hookspath=[],
               runtime_hooks=[],
               excludes=[],
               win_no_prefer_redirects=False,
               win_private_assemblies=False,
               cipher=block_cipher,
               noarchive=False)
  pyz = PYZ(a.pure, a.zipped_data,
               cipher=block_cipher)
  exe = EXE(pyz,
            a.scripts,
            [],
            exclude_binaries=True,
            name='bundle',
            debug=False,
            bootloader_ignore_signals=False,
            strip=False,
            upx=True,
            console=True )
  coll = COLLECT(exe,
                 a.binaries,
                 a.zipfiles,
                 a.datas,
                 strip=False,
                 upx=True,
                 upx_exclude=[],
                 name='bundle')
  </code></pre>