├── .gitignore ├── PyMOL.ico ├── README.md └── setup.py /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | build/ 12 | develop-eggs/ 13 | dist/ 14 | downloads/ 15 | eggs/ 16 | .eggs/ 17 | lib/ 18 | lib64/ 19 | parts/ 20 | sdist/ 21 | var/ 22 | wheels/ 23 | _/ 24 | pip-wheel-metadata/ 25 | share/python-wheels/ 26 | *.egg-info/ 27 | .installed.cfg 28 | *.egg 29 | *.whl 30 | *.exe 31 | *.rc 32 | *.res 33 | *.obj 34 | *.cpp 35 | MANIFEST 36 | 37 | # PyInstaller 38 | # Usually these files are written by a python script from a template 39 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 40 | *.manifest 41 | *.spec 42 | 43 | # Installer logs 44 | pip-log.txt 45 | pip-delete-this-directory.txt 46 | 47 | # Unit test / coverage reports 48 | htmlcov/ 49 | .tox/ 50 | .nox/ 51 | .coverage 52 | .coverage.* 53 | .cache 54 | nosetests.xml 55 | coverage.xml 56 | *.cover 57 | *.py,cover 58 | .hypothesis/ 59 | .pytest_cache/ 60 | 61 | # Translations 62 | *.mo 63 | *.pot 64 | 65 | # Django stuff: 66 | *.log 67 | local_settings.py 68 | db.sqlite3 69 | db.sqlite3-journal 70 | 71 | # Flask stuff: 72 | instance/ 73 | .webassets-cache 74 | 75 | # Scrapy stuff: 76 | .scrapy 77 | 78 | # Sphinx documentation 79 | docs/_build/ 80 | 81 | # PyBuilder 82 | target/ 83 | 84 | # Jupyter Notebook 85 | .ipynb_checkpoints 86 | 87 | # IPython 88 | profile_default/ 89 | ipython_config.py 90 | 91 | # pyenv 92 | .python-version 93 | 94 | # pipenv 95 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 96 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 97 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 98 | # install all needed dependencies. 99 | #Pipfile.lock 100 | 101 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow 102 | __pypackages__/ 103 | 104 | # Celery stuff 105 | celerybeat-schedule 106 | celerybeat.pid 107 | 108 | # SageMath parsed files 109 | *.sage.py 110 | 111 | # Environments 112 | .env 113 | .venv 114 | env/ 115 | venv/ 116 | ENV/ 117 | env.bak/ 118 | venv.bak/ 119 | 120 | # Spyder project settings 121 | .spyderproject 122 | .spyproject 123 | 124 | # Rope project settings 125 | .ropeproject 126 | 127 | # mkdocs documentation 128 | /site 129 | 130 | # mypy 131 | .mypy_cache/ 132 | .dmypy.json 133 | dmypy.json 134 | 135 | # Pyre type checker 136 | .pyre/ 137 | -------------------------------------------------------------------------------- /PyMOL.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cgohlke/pymol-open-source-wheels/d8b83ac6e633460da8caf021eab3173b1fb6029b/PyMOL.ico -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Pymol-open-source wheels for Python on Windows 2 | 3 | This repository provides unofficial binary wheels for [Pymol-open-source](https://github.com/schrodinger/pymol-open-source) for Python on Windows. 4 | 5 | [PyMOL(tm)](https://pymol.org) is a visualization software for rendering and animating 3D molecular structures. PyMOL is a trademark of Schrodinger, LLC. 6 | 7 | The files are unofficial (meaning: informal, unrecognized, personal, unsupported, no warranty, no liability, provided "as is") and made available for testing and evaluation purposes. 8 | 9 | Source code changes, if any, have been submitted to the project maintainers or are included in the wheels. 10 | 11 | ## Installation 12 | 13 | The wheels can be downloaded from the [Releases](https://github.com/cgohlke/pymol-open-source.whl/releases) page. 14 | 15 | Install a wheel on the command line, for example for Python 3.13 64-bit: 16 | 17 | py.exe -3.13 -m pip install pymol-3.1.0-cp313-cp313-win_amd64.whl 18 | 19 | Start the Pymol app using the ``pymol.exe`` executable in Python's script folder or from the command line: 20 | 21 | py.exe -3.13 -m pymol 22 | 23 | The [Microsoft Visual C++ Redistributable packages for Visual Studio 2022](https://learn.microsoft.com/en-US/cpp/windows/latest-supported-vc-redist?view=msvc-170) is required to run the software. 24 | 25 | The ``pymol-open-source`` package conflicts with the [``chempy``](https://pypi.org/project/chempy/) package. Only one library can be imported in a process. 26 | 27 | ## Release 2025.2.2 28 | 29 | This release was built from the following source code: 30 | 31 | - [Pymol-open-source](https://github.com/schrodinger/pymol-open-source/) 3.1.0 [master](https://github.com/schrodinger/pymol-open-source/commit/f51e58f6b08308c41c85b9d12a23231f49ca325a) 32 | - [boost](https://www.boost.org/users/download/) 1.87.0 33 | - [brotli](https://github.com/google/brotli) 1.1.0 34 | - [bzip2](https://sourceware.org/pub/bzip2/) 1.0.8 35 | - [freeglut](https://github.com/FreeGLUTProject/freeglut) 3.6.0 36 | - [freetype](https://download.savannah.gnu.org/releases/freetype/) 2.13.3 37 | - [glew](https://github.com/nigels-com/glew) 2.2.0 38 | - [glm](https://github.com/g-truc/glm) 1.0.1 39 | - [harfbuzz](https://github.com/harfbuzz/harfbuzz) 10.2.0 40 | - [libpng](https://github.com/glennrp/libpng) 1.6.45 41 | - [libxml2](https://gitlab.gnome.org/GNOME/libxml2) 2.12.9 42 | - [libxslt](https://gitlab.gnome.org/GNOME/libxslt) 1.1.42 43 | - [mmtf-cpp](https://github.com/rcsb/mmtf-cpp) 1.1.0 44 | - [msgpack-cxx](https://github.com/msgpack/msgpack-c/tree/cpp_master) 6.1.0 45 | - [VTK-m](https://gitlab.kitware.com/vtk/vtk-m) 1.9.0 46 | - [win-iconv](https://github.com/OgreTransporter/win-iconv) master 47 | - [zlib-ng](https://github.com/zlib-ng/zlib-ng) 2.2.3 48 | 49 | ## Build system 50 | 51 | - [Windows Dev Kit](https://learn.microsoft.com/en-us/windows/arm/dev-kit/) 2023 52 | - [Visual Studio](https://visualstudio.microsoft.com/vs/community/) 2022 Community 17.12 53 | - [CPython](https://www.python.org/downloads/windows/) 3.10, 3.11, 3.12, 3.13 54 | - [PyPy](https://www.pypy.org/download.html) 3.10 55 | 56 | ## Alternatives 57 | 58 | Official binaries for PyMOL for Windows are available at [pymol.org](https://pymol.org). 59 | -------------------------------------------------------------------------------- /setup.py: -------------------------------------------------------------------------------- 1 | # setup.py for pymol-launcher 2 | 3 | import subprocess 4 | import sys 5 | 6 | from setuptools import setup 7 | from setuptools._distutils import ccompiler 8 | 9 | with open('pymol.cpp', 'w') as fh: 10 | fh.write( 11 | """ 12 | #define WIN32_LEAN_AND_MEAN 13 | #include 14 | #include 15 | 16 | int 17 | PyMOL_Main(int argc, wchar_t **argv) 18 | { 19 | PyStatus status; 20 | PyConfig config; 21 | 22 | PyConfig_InitPythonConfig(&config); 23 | status = PyConfig_SetArgv(&config, argc, argv); 24 | if (PyStatus_Exception(status)) { 25 | goto fail; 26 | } 27 | config.parse_argv = 0; 28 | status = PyConfig_SetString(&config, &config.run_module, L"pymol"); 29 | if (PyStatus_Exception(status)) { 30 | goto fail; 31 | } 32 | status = Py_InitializeFromConfig(&config); 33 | if (PyStatus_Exception(status)) { 34 | goto fail; 35 | } 36 | PyConfig_Clear(&config); 37 | return Py_RunMain(); 38 | 39 | fail: 40 | PyConfig_Clear(&config); 41 | if (PyStatus_IsExit(status)) { 42 | return status.exitcode; 43 | } 44 | assert(PyStatus_Exception(status)); 45 | Py_ExitStatusException(status); 46 | return 0; 47 | } 48 | 49 | int WINAPI wWinMain( 50 | HINSTANCE hInstance, 51 | HINSTANCE hPrevInstance, 52 | LPWSTR lpCmdLine, 53 | int nCmdShow 54 | ) 55 | { 56 | return PyMOL_Main(__argc, __wargv); 57 | } 58 | """ 59 | ) 60 | 61 | with open('pymol.rc', 'w') as fh: 62 | fh.write('IDI_MAIN_ICON ICON "PyMOL.ico"') 63 | 64 | subprocess.run(['rc.exe', '/v', 'pymol.rc']) 65 | 66 | compiler = ccompiler.new_compiler() 67 | objects = compiler.compile( 68 | ['pymol.cpp'], include_dirs=[f'{sys.prefix}\\include'] 69 | ) 70 | compiler.link_executable( 71 | objects + ['pymol.res'], 72 | 'PyMOL', 73 | output_dir='.', 74 | library_dirs=[f'{sys.prefix}\\libs'], 75 | libraries=[f'python3{sys.version_info[1]}'], 76 | ) 77 | 78 | setup( 79 | name="pymol-launcher", 80 | version="3.1", 81 | # install_requires=['pymol'], 82 | packages=[], 83 | libraries=[('', {'sources': []})], 84 | data_files=[('', ['PyMOL.exe'])], 85 | ) 86 | --------------------------------------------------------------------------------