
Hi, I apologize sincerely since I imagine this comes up often on the mailing list. I'm basically wondering if it's possible to import just the `core` functionality from a chimerax installation into a custom python environment and bypass the GUI and the binary completely. Example: I don't think it matters whether it's linux, mac, or source build, but let's say i installed a clean chimerax via my package manager (`yay i chimerax`). It's at `/opt/chimerax` and looks like this: (venv) ᢹ ritual.rtviii[ /opt/chimerax ] ls -la total 24 drwxr-xr-x 6 root root 4096 May 1 16:08 . drwxr-xr-x 10 root root 4096 May 1 16:58 .. drwxr-xr-x 4 root root 4096 May 1 16:51 bin drwxr-xr-x 8 root root 4096 May 1 16:51 include drwxr-xr-x 4 root root 4096 May 1 16:51 lib drwxr-xr-x 6 root root 4096 May 1 16:51 share If I launch `chimerax` at the command line, i get a functional GUI etc. It works. I create a fresh custom `virtualenv` with the same python that this chimerax ships: virtualenv --python='/opt/chimerax/bin/python3.11' venv Then i do something ugly in the name of science: i symlink the chimerax folder from the installation into my virtualenv: ln -s /opt/chimerax/lib/python3.11/site-packages/chimerax /home/rtviii/dev/try_chimerax/venv/lib/python3.11/site-packages/chimerax i also tried: for P in $(ls /opt/chimerax/lib/python3.11/site-packages/); do ln -s /opt/chimerax/lib/python3.11/site-packages/$P /home/rtviii/dev/try_chimerax/ venv/lib/python3.11/site-packages/$P; done This enables me to import chimerax modules into my python code that uses this virtualenv: ```/home/rtviii/dev/try_chimerax/test.py from chimerax.core.commands import run from chimerax.core.session import Session import chimerax.mmcif.mmcif as mmcif s = Session("Hi") print(s) run(s,"open 1ubq.cif") ``` However, this is where i'm struggling a little to use any actual functionality (especially interested in cutting, merging structures and operations treating density maps and mmcif structures) because the Session wouldn't initialize well: ``` <chimerax.core.session.Session object at 0x70472673b5d0> NOTE: Traceback (most recent call last): File "/home/rtviii/dev/try_chimerax/test.py", line 9, in <module> run(s,"open 1ubq.cif") File "/home/rtviii/dev/try_chimerax/venv/lib/python3.11/site- packages/chimerax/core/commands/run.py", line 49, in run results = command.run(text, log=log, return_json=return_json) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/rtviii/dev/try_chimerax/venv/lib/python3.11/site-packages/chimerax/core/commands/cli.py", line 2849, in run _compute_available_commands(session) File "/home/rtviii/dev/try_chimerax/venv/lib/python3.11/site-packages/chimerax/core/commands/cli.py", line 2431, in _compute_available_commands ts.register_available_commands(session.logger) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AttributeError: 'NoneType' object has no attribute'register_available_commands' BUG: AttributeError: 'NoneType' object has no attribute'register_available_commands' File "/home/rtviii/dev/try_chimerax/venv/lib/python3.11/site- packages/chimerax/core/commands/cli.py", line 2431, in _compute_available_commands ts.register_available_commands(session.logger) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _See log for complete Python traceback._ ``` I had some success with a similar approach in PyMol in this regard, but can't quite get this to work in ChimeraX. I really appreciate any advice for achieving this scripting decoupling from GUI/binary if that's possible at all: - either how to "pull in" ChimeraX library code properly (i realize mine is an ugly hack) - how to use library code otherwise - how to bypass the dependence of a lot of commands on the Session object or how to initialize it outside of the gui properly: an example of how to use selections to open a local density map and perform a smoothing, for example. Kindest regards and huge thanks for the monumental application. Artem, UBC Vancouver