Today, I tested the ollama with pyqt6 and works great:

Python tutorials with source code, examples, guides, and tips and tricks for Windows and Linux development.

pip install schemdraw
WARNING: Ignoring invalid distribution ~adquery-ocp (C:\Python313_64bit\Lib\site-packages)
Collecting schemdraw
Downloading schemdraw-0.22-py3-none-any.whl.metadata (2.2 kB)
Downloading schemdraw-0.22-py3-none-any.whl (148 kB)
WARNING: Ignoring invalid distribution ~adquery-ocp (C:\Python313_64bit\Lib\site-packages)
Installing collected packages: schemdraw
WARNING: Ignoring invalid distribution ~adquery-ocp (C:\Python313_64bit\Lib\site-packages)
Successfully installed schemdraw-0.22

pip install manim
...
Successfully installed audioop-lts-0.2.2 av-16.1.0 cloup-3.0.8 glcontext-3.0.0 isosurfaces-0.1.2 manim-0.20.1 manimpango-0.6.1 mapbox-earcut-2.0.0 moderngl-5.12.0 moderngl-window-3.1.1 pycairo-1.29.0 pydub-0.25.1 pyglet-2.1.13 pyglm-2.8.3 screeninfo-0.8.1 skia-pathops-0.9.2 srt-3.5.3import subprocess
import sys
import datetime
log_file = "upgrade_log.txt"
def log(msg):
with open(log_file, "a", encoding="utf-8") as f:
f.write(msg + "\n")
print(msg)
def get_installed_packages():
result = subprocess.run(
[sys.executable, "-m", "pip", "list", "--format=freeze"],
capture_output=True,
text=True
)
lines = result.stdout.strip().split("\n")
packages = []
for line in lines:
if "@" in line: # skip direct URL installs
pkg = line.split("@")[0]
else:
pkg = line.split("==")[0]
packages.append(pkg)
return sorted(packages)
def upgrade_package(package):
log(f"\n=== Updating: {package} ===")
try:
subprocess.check_call([sys.executable, "-m", "pip", "install", "--upgrade", package])
log(f"[OK] Updated: {package}")
except subprocess.CalledProcessError:
log(f"[FAILED] Could not update: {package}")
def main():
log(f"\n--- Upgrade started at {datetime.datetime.now()} ---\n")
packages = get_installed_packages()
log(f"Found {len(packages)} packages.\n")
for pkg in packages:
upgrade_package(pkg)
log(f"\n--- Upgrade finished at {datetime.datetime.now()} ---\n")
if __name__ == "__main__":
main()python -m pip install build123d
Collecting build123d
Downloading build123d-0.10.0-py3-none-any.whl.metadata (6.7 kB)
...
Successfully installed anytree-2.13.0 asttokens-3.0.1 build123d-0.10.0 cadquery-ocp-7.8.1.1.post1 cadquery_ocp_proxy-7.9.3.1 cadquery_vtk-9.3.1 decorator-5.2.1 executing-2.2.1 ezdxf-1.4.3 ipython-9.10.0 ipython-pygments-lexers-1.1.1 lib3mf-2.5.0 matplotlib-inline-0.2.1 ocp_gordon-0.2.0 ocpsvg-0.5.0 pure-eval-0.2.3 stack_data-0.6.3 svgelements-1.9.6 svgpathtools-1.7.2 traitlets-5.14.3 trianglesolver-1.2 webcolors-24.8.0
import os
import sys
from PyQt6.QtWidgets import QApplication, QWidget, QVBoxLayout
from PyQt6.QtWebEngineWidgets import QWebEngineView
from PyQt6.QtCore import QUrl
import py3Dmol
SEROTONIN_SMILES = "C1=CC2=C(C=C1)C(=CN2)CCN"
def generate_html(smiles):
view = py3Dmol.view(width=800, height=600)
view.addModel(smiles, "smiles")
view.setStyle({"stick": {}})
view.zoomTo()
return view._make_html()
class MoleculeViewer(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("Structura 3D – Serotonină")
layout = QVBoxLayout(self)
self.browser = QWebEngineView()
html = generate_html(SEROTONIN_SMILES)
# IMPORTANT: QUrl, nu string!
self.browser.setHtml(html, baseUrl=QUrl("https://localhost/"))
layout.addWidget(self.browser)
if __name__ == "__main__":
app = QApplication(sys.argv)
window = MoleculeViewer()
window.resize(900, 700)
window.show()
sys.exit(app.exec())


C:\Python313_64bit>python
Python 3.13.0 (tags/v3.13.0:60403a5, Oct 7 2024, 09:38:07) [MSC v.1941 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> import sys
(r-search `os') import os