M4 Mac OS Install #1175
-
Hi, what's the best option to install TopoStats on a M4 Mac? Thank you |
Beta Was this translation helpful? Give feedback.
Replies: 4 comments 8 replies
-
Hey @sebastienjanel :) An M4 Mac should work just like my M1 Mac I think, so I wouldn't expect any difference. You are correct about the Python and The documentation for installation should work for you (I use an M1 Mac and it is fine for me), but here is a brief TL;DR: I'd recommend creating a Python
|
Beta Was this translation helpful? Give feedback.
-
Sure its not I've just created a fresh virtual environment, cloned the repository, checked the tags, installed and checked the version of Create a new virtualenv❱ mktmpenv -p python3.11
created virtual environment CPython3.11.11.final.0-64 in 200ms
creator CPython3Posix(dest=/home/neil/.virtualenvs/tmp-9b400ec0d8531bd, clear=False, no_vcs_ignore=False, global=False)
seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=/home/neil/.local/share/virtualenv)
added seed packages: pip==25.1.1, setuptools==80.7.1, wheel==0.45.1
activators BashActivator,CShellActivator,FishActivator,NushellActivator,PowerShellActivator,PythonActivator
virtualenvwrapper.user_scripts creating /home/neil/.virtualenvs/tmp-9b400ec0d8531bd/bin/predeactivate
virtualenvwrapper.user_scripts creating /home/neil/.virtualenvs/tmp-9b400ec0d8531bd/bin/postdeactivate
virtualenvwrapper.user_scripts creating /home/neil/.virtualenvs/tmp-9b400ec0d8531bd/bin/preactivate
virtualenvwrapper.user_scripts creating /home/neil/.virtualenvs/tmp-9b400ec0d8531bd/bin/postactivate
virtualenvwrapper.user_scripts creating /home/neil/.virtualenvs/tmp-9b400ec0d8531bd/bin/get_env_details Clone the repository❱ git clone [email protected]:AFM-SPM/TopoStats.git
Cloning into 'TopoStats'...
remote: Enumerating objects: 29188, done.
remote: Counting objects: 100% (1732/1732), done.
remote: Compressing objects: 100% (271/271), done.
remote: Total 29188 (delta 999), reused 1705 (delta 984), pack-reused 27456 (from 2)
Receiving objects: 100% (29188/29188), 1013.79 MiB | 18.14 MiB/s, done.
Resolving deltas: 100% (20478/20478), done. Go into the cloned repository and list tags❱ cd TopoStats
❱ git tag --list
v2.3.1 v2.2.1 v2.2.post0 v2.2.0 v2.1.2 v2.1.1 v2.1.0 v2.0.0 v2.3.0 Install and check version❱ pip install -e .
Obtaining file:///home/neil/tmp/TopoStats
Installing build dependencies ... done
Checking if build backend supports build_editable ... done
Getting requirements to build editable ... done
Preparing editable metadata (pyproject.toml) ... done
Collecting art (from topostats==2.3.2.dev487+g961c60ba)
Using cached art-6.5-py3-none-any.whl.metadata (72 kB)
Collecting AFMReader@ git+https://github.com/AFM-SPM/AFMReader@main (from topostats==2.3.2.dev487+g961c60ba)
Cloning https://github.com/AFM-SPM/AFMReader (to revision main) to /tmp/pip-install-yhr3dckm/afmreader_1ee2adb5a7464baa8953a916963e083b
Running command git clone --filter=blob:none --quiet https://github.com/AFM-SPM/AFMReader /tmp/pip-install-yhr3dckm/afmreader_1ee2adb5a7464baa8953a916963e083b
Resolved https://github.com/AFM-SPM/AFMReader to commit 794e2d100217be949e3d2fe83d159576273a18c6
Installing build dependencies ... done
Getting requirements to build wheel ... done
Preparing metadata (pyproject.toml) ... done
Collecting h5py (from topostats==2.3.2.dev487+g961c60ba)
Downloading h5py-3.14.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (2.7 kB)
Collecting keras (from topostats==2.3.2.dev487+g961c60ba)
Using cached keras-3.10.0-py3-none-any.whl.metadata (6.0 kB)
Collecting matplotlib (from topostats==2.3.2.dev487+g961c60ba)
Downloading matplotlib-3.10.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (11 kB)
Collecting numpy~=2.0.0 (from topostats==2.3.2.dev487+g961c60ba)
Using cached numpy-2.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (60 kB)
Collecting numpyencoder@ git+https://github.com/AFM-SPM/numpyencoder@master (from topostats==2.3.2.dev487+g961c60ba)
Cloning https://github.com/AFM-SPM/numpyencoder (to revision master) to /tmp/pip-install-yhr3dckm/numpyencoder_e9e4b8462a2949189f5775a442c5d354
Running command git clone --filter=blob:none --quiet https://github.com/AFM-SPM/numpyencoder /tmp/pip-install-yhr3dckm/numpyencoder_e9e4b8462a2949189f5775a442c5d354
Resolved https://github.com/AFM-SPM/numpyencoder to commit cd84c7cbb7e59386ed7c0a7e03e03c4134b2b84c
Preparing metadata (setup.py) ... done
Collecting pandas (from topostats==2.3.2.dev487+g961c60ba)
Downloading pandas-2.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (91 kB)
Collecting pyyaml (from topostats==2.3.2.dev487+g961c60ba)
Using cached PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (2.1 kB)
Collecting ruamel.yaml (from topostats==2.3.2.dev487+g961c60ba)
Downloading ruamel.yaml-0.18.14-py3-none-any.whl.metadata (24 kB)
Collecting schema (from topostats==2.3.2.dev487+g961c60ba)
Using cached schema-0.7.7-py2.py3-none-any.whl.metadata (34 kB)
Collecting scikit-image (from topostats==2.3.2.dev487+g961c60ba)
Using cached scikit_image-0.25.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (14 kB)
Collecting scipy (from topostats==2.3.2.dev487+g961c60ba)
Using cached scipy-1.15.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (61 kB)
Collecting seaborn (from topostats==2.3.2.dev487+g961c60ba)
Using cached seaborn-0.13.2-py3-none-any.whl.metadata (5.4 kB)
Collecting skan (from topostats==2.3.2.dev487+g961c60ba)
Using cached skan-0.12.2-py3-none-any.whl.metadata (3.0 kB)
Collecting snoop (from topostats==2.3.2.dev487+g961c60ba)
Using cached snoop-0.6.0-py3-none-any.whl.metadata (22 kB)
Collecting tensorflow (from topostats==2.3.2.dev487+g961c60ba)
Using cached tensorflow-2.19.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.1 kB)
Collecting topoly (from topostats==2.3.2.dev487+g961c60ba)
Using cached topoly-1.1.0-cp311-cp311-manylinux2014_x86_64.whl.metadata (3.8 kB)
Collecting tqdm (from topostats==2.3.2.dev487+g961c60ba)
Using cached tqdm-4.67.1-py3-none-any.whl.metadata (57 kB)
Collecting igor2 (from AFMReader@ git+https://github.com/AFM-SPM/AFMReader@main->topostats==2.3.2.dev487+g961c60ba)
Using cached igor2-0.5.12-py3-none-any.whl.metadata (2.9 kB)
Collecting loguru (from AFMReader@ git+https://github.com/AFM-SPM/AFMReader@main->topostats==2.3.2.dev487+g961c60ba)
Using cached loguru-0.7.3-py3-none-any.whl.metadata (22 kB)
Collecting pySPM (from AFMReader@ git+https://github.com/AFM-SPM/AFMReader@main->topostats==2.3.2.dev487+g961c60ba)
Using cached pyspm-0.6.3-py3-none-any.whl.metadata (6.6 kB)
Collecting tifffile (from AFMReader@ git+https://github.com/AFM-SPM/AFMReader@main->topostats==2.3.2.dev487+g961c60ba)
Using cached tifffile-2025.6.11-py3-none-any.whl.metadata (32 kB)
Collecting absl-py (from keras->topostats==2.3.2.dev487+g961c60ba)
Using cached absl_py-2.3.0-py3-none-any.whl.metadata (2.4 kB)
Collecting rich (from keras->topostats==2.3.2.dev487+g961c60ba)
Using cached rich-14.0.0-py3-none-any.whl.metadata (18 kB)
Collecting namex (from keras->topostats==2.3.2.dev487+g961c60ba)
Using cached namex-0.1.0-py3-none-any.whl.metadata (322 bytes)
Collecting optree (from keras->topostats==2.3.2.dev487+g961c60ba)
Using cached optree-0.16.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (30 kB)
Collecting ml-dtypes (from keras->topostats==2.3.2.dev487+g961c60ba)
Using cached ml_dtypes-0.5.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (21 kB)
Collecting packaging (from keras->topostats==2.3.2.dev487+g961c60ba)
Using cached packaging-25.0-py3-none-any.whl.metadata (3.3 kB)
Collecting contourpy>=1.0.1 (from matplotlib->topostats==2.3.2.dev487+g961c60ba)
Using cached contourpy-1.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (5.5 kB)
Collecting cycler>=0.10 (from matplotlib->topostats==2.3.2.dev487+g961c60ba)
Using cached cycler-0.12.1-py3-none-any.whl.metadata (3.8 kB)
Collecting fonttools>=4.22.0 (from matplotlib->topostats==2.3.2.dev487+g961c60ba)
Downloading fonttools-4.58.4-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.metadata (106 kB)
Collecting kiwisolver>=1.3.1 (from matplotlib->topostats==2.3.2.dev487+g961c60ba)
Using cached kiwisolver-1.4.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (6.2 kB)
Collecting pillow>=8 (from matplotlib->topostats==2.3.2.dev487+g961c60ba)
Using cached pillow-11.2.1-cp311-cp311-manylinux_2_28_x86_64.whl.metadata (8.9 kB)
Collecting pyparsing>=2.3.1 (from matplotlib->topostats==2.3.2.dev487+g961c60ba)
Using cached pyparsing-3.2.3-py3-none-any.whl.metadata (5.0 kB)
Collecting python-dateutil>=2.7 (from matplotlib->topostats==2.3.2.dev487+g961c60ba)
Using cached python_dateutil-2.9.0.post0-py2.py3-none-any.whl.metadata (8.4 kB)
Collecting six>=1.5 (from python-dateutil>=2.7->matplotlib->topostats==2.3.2.dev487+g961c60ba)
Using cached six-1.17.0-py2.py3-none-any.whl.metadata (1.7 kB)
Collecting typing-extensions>=4.6.0 (from optree->keras->topostats==2.3.2.dev487+g961c60ba)
Downloading typing_extensions-4.14.0-py3-none-any.whl.metadata (3.0 kB)
Collecting pytz>=2020.1 (from pandas->topostats==2.3.2.dev487+g961c60ba)
Using cached pytz-2025.2-py2.py3-none-any.whl.metadata (22 kB)
Collecting tzdata>=2022.7 (from pandas->topostats==2.3.2.dev487+g961c60ba)
Using cached tzdata-2025.2-py2.py3-none-any.whl.metadata (1.4 kB)
Collecting ipython<9.0.0,>=8.16.0 (from pySPM->AFMReader@ git+https://github.com/AFM-SPM/AFMReader@main->topostats==2.3.2.dev487+g961c60ba)
Using cached ipython-8.37.0-py3-none-any.whl.metadata (5.1 kB)
Collecting psutil<6.0.0,>=5.9.4 (from pySPM->AFMReader@ git+https://github.com/AFM-SPM/AFMReader@main->topostats==2.3.2.dev487+g961c60ba)
Using cached psutil-5.9.8-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (21 kB)
Collecting scikit-learn<2.0.0,>=1.2.2 (from pySPM->AFMReader@ git+https://github.com/AFM-SPM/AFMReader@main->topostats==2.3.2.dev487+g961c60ba)
Downloading scikit_learn-1.7.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (17 kB)
Collecting decorator (from ipython<9.0.0,>=8.16.0->pySPM->AFMReader@ git+https://github.com/AFM-SPM/AFMReader@main->topostats==2.3.2.dev487+g961c60ba)
Using cached decorator-5.2.1-py3-none-any.whl.metadata (3.9 kB)
Collecting jedi>=0.16 (from ipython<9.0.0,>=8.16.0->pySPM->AFMReader@ git+https://github.com/AFM-SPM/AFMReader@main->topostats==2.3.2.dev487+g961c60ba)
Using cached jedi-0.19.2-py2.py3-none-any.whl.metadata (22 kB)
Collecting matplotlib-inline (from ipython<9.0.0,>=8.16.0->pySPM->AFMReader@ git+https://github.com/AFM-SPM/AFMReader@main->topostats==2.3.2.dev487+g961c60ba)
Using cached matplotlib_inline-0.1.7-py3-none-any.whl.metadata (3.9 kB)
Collecting pexpect>4.3 (from ipython<9.0.0,>=8.16.0->pySPM->AFMReader@ git+https://github.com/AFM-SPM/AFMReader@main->topostats==2.3.2.dev487+g961c60ba)
Using cached pexpect-4.9.0-py2.py3-none-any.whl.metadata (2.5 kB)
Collecting prompt_toolkit<3.1.0,>=3.0.41 (from ipython<9.0.0,>=8.16.0->pySPM->AFMReader@ git+https://github.com/AFM-SPM/AFMReader@main->topostats==2.3.2.dev487+g961c60ba)
Using cached prompt_toolkit-3.0.51-py3-none-any.whl.metadata (6.4 kB)
Collecting pygments>=2.4.0 (from ipython<9.0.0,>=8.16.0->pySPM->AFMReader@ git+https://github.com/AFM-SPM/AFMReader@main->topostats==2.3.2.dev487+g961c60ba)
Using cached pygments-2.19.1-py3-none-any.whl.metadata (2.5 kB)
Collecting stack_data (from ipython<9.0.0,>=8.16.0->pySPM->AFMReader@ git+https://github.com/AFM-SPM/AFMReader@main->topostats==2.3.2.dev487+g961c60ba)
Using cached stack_data-0.6.3-py3-none-any.whl.metadata (18 kB)
Collecting traitlets>=5.13.0 (from ipython<9.0.0,>=8.16.0->pySPM->AFMReader@ git+https://github.com/AFM-SPM/AFMReader@main->topostats==2.3.2.dev487+g961c60ba)
Using cached traitlets-5.14.3-py3-none-any.whl.metadata (10 kB)
Collecting wcwidth (from prompt_toolkit<3.1.0,>=3.0.41->ipython<9.0.0,>=8.16.0->pySPM->AFMReader@ git+https://github.com/AFM-SPM/AFMReader@main->topostats==2.3.2.dev487+g961c60ba)
Using cached wcwidth-0.2.13-py2.py3-none-any.whl.metadata (14 kB)
Collecting joblib>=1.2.0 (from scikit-learn<2.0.0,>=1.2.2->pySPM->AFMReader@ git+https://github.com/AFM-SPM/AFMReader@main->topostats==2.3.2.dev487+g961c60ba)
Using cached joblib-1.5.1-py3-none-any.whl.metadata (5.6 kB)
Collecting threadpoolctl>=3.1.0 (from scikit-learn<2.0.0,>=1.2.2->pySPM->AFMReader@ git+https://github.com/AFM-SPM/AFMReader@main->topostats==2.3.2.dev487+g961c60ba)
Using cached threadpoolctl-3.6.0-py3-none-any.whl.metadata (13 kB)
Collecting parso<0.9.0,>=0.8.4 (from jedi>=0.16->ipython<9.0.0,>=8.16.0->pySPM->AFMReader@ git+https://github.com/AFM-SPM/AFMReader@main->topostats==2.3.2.dev487+g961c60ba)
Using cached parso-0.8.4-py2.py3-none-any.whl.metadata (7.7 kB)
Collecting ptyprocess>=0.5 (from pexpect>4.3->ipython<9.0.0,>=8.16.0->pySPM->AFMReader@ git+https://github.com/AFM-SPM/AFMReader@main->topostats==2.3.2.dev487+g961c60ba)
Using cached ptyprocess-0.7.0-py2.py3-none-any.whl.metadata (1.3 kB)
Collecting networkx>=3.0 (from scikit-image->topostats==2.3.2.dev487+g961c60ba)
Using cached networkx-3.5-py3-none-any.whl.metadata (6.3 kB)
Collecting imageio!=2.35.0,>=2.33 (from scikit-image->topostats==2.3.2.dev487+g961c60ba)
Using cached imageio-2.37.0-py3-none-any.whl.metadata (5.2 kB)
Collecting lazy-loader>=0.4 (from scikit-image->topostats==2.3.2.dev487+g961c60ba)
Using cached lazy_loader-0.4-py3-none-any.whl.metadata (7.6 kB)
Collecting markdown-it-py>=2.2.0 (from rich->keras->topostats==2.3.2.dev487+g961c60ba)
Using cached markdown_it_py-3.0.0-py3-none-any.whl.metadata (6.9 kB)
Collecting mdurl~=0.1 (from markdown-it-py>=2.2.0->rich->keras->topostats==2.3.2.dev487+g961c60ba)
Using cached mdurl-0.1.2-py3-none-any.whl.metadata (1.6 kB)
Collecting ruamel.yaml.clib>=0.2.7 (from ruamel.yaml->topostats==2.3.2.dev487+g961c60ba)
Using cached ruamel.yaml.clib-0.2.12-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (2.7 kB)
Collecting magicgui>=0.7.3 (from skan->topostats==2.3.2.dev487+g961c60ba)
Downloading magicgui-0.10.1-py3-none-any.whl.metadata (5.5 kB)
Collecting numba>=0.53 (from skan->topostats==2.3.2.dev487+g961c60ba)
Using cached numba-0.61.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.metadata (2.8 kB)
Collecting openpyxl>=2.6 (from skan->topostats==2.3.2.dev487+g961c60ba)
Using cached openpyxl-3.1.5-py2.py3-none-any.whl.metadata (2.5 kB)
Collecting toolz>=0.10.0 (from skan->topostats==2.3.2.dev487+g961c60ba)
Using cached toolz-1.0.0-py3-none-any.whl.metadata (5.1 kB)
Collecting docstring-parser>=0.7 (from magicgui>=0.7.3->skan->topostats==2.3.2.dev487+g961c60ba)
Using cached docstring_parser-0.16-py3-none-any.whl.metadata (3.0 kB)
Collecting psygnal>=0.8.0 (from magicgui>=0.7.3->skan->topostats==2.3.2.dev487+g961c60ba)
Using cached psygnal-0.13.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (6.0 kB)
Collecting qtpy>=2.4.0 (from magicgui>=0.7.3->skan->topostats==2.3.2.dev487+g961c60ba)
Using cached QtPy-2.4.3-py3-none-any.whl.metadata (12 kB)
Collecting superqt>=0.7.2 (from superqt[iconify]>=0.7.2->magicgui>=0.7.3->skan->topostats==2.3.2.dev487+g961c60ba)
Downloading superqt-0.7.4-py3-none-any.whl.metadata (6.2 kB)
Collecting llvmlite<0.45,>=0.44.0dev0 (from numba>=0.53->skan->topostats==2.3.2.dev487+g961c60ba)
Using cached llvmlite-0.44.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.8 kB)
Collecting et-xmlfile (from openpyxl>=2.6->skan->topostats==2.3.2.dev487+g961c60ba)
Using cached et_xmlfile-2.0.0-py3-none-any.whl.metadata (2.7 kB)
Collecting pyconify>=0.1.4 (from superqt[iconify]>=0.7.2->magicgui>=0.7.3->skan->topostats==2.3.2.dev487+g961c60ba)
Using cached pyconify-0.2.1-py3-none-any.whl.metadata (5.5 kB)
Collecting requests (from pyconify>=0.1.4->superqt[iconify]>=0.7.2->magicgui>=0.7.3->skan->topostats==2.3.2.dev487+g961c60ba)
Downloading requests-2.32.4-py3-none-any.whl.metadata (4.9 kB)
Collecting charset_normalizer<4,>=2 (from requests->pyconify>=0.1.4->superqt[iconify]>=0.7.2->magicgui>=0.7.3->skan->topostats==2.3.2.dev487+g961c60ba)
Using cached charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (35 kB)
Collecting idna<4,>=2.5 (from requests->pyconify>=0.1.4->superqt[iconify]>=0.7.2->magicgui>=0.7.3->skan->topostats==2.3.2.dev487+g961c60ba)
Using cached idna-3.10-py3-none-any.whl.metadata (10 kB)
Collecting urllib3<3,>=1.21.1 (from requests->pyconify>=0.1.4->superqt[iconify]>=0.7.2->magicgui>=0.7.3->skan->topostats==2.3.2.dev487+g961c60ba)
Using cached urllib3-2.4.0-py3-none-any.whl.metadata (6.5 kB)
Collecting certifi>=2017.4.17 (from requests->pyconify>=0.1.4->superqt[iconify]>=0.7.2->magicgui>=0.7.3->skan->topostats==2.3.2.dev487+g961c60ba)
Downloading certifi-2025.6.15-py3-none-any.whl.metadata (2.4 kB)
Collecting cheap-repr>=0.4.0 (from snoop->topostats==2.3.2.dev487+g961c60ba)
Using cached cheap_repr-0.5.2-py2.py3-none-any.whl.metadata (10 kB)
Collecting executing (from snoop->topostats==2.3.2.dev487+g961c60ba)
Using cached executing-2.2.0-py2.py3-none-any.whl.metadata (8.9 kB)
Collecting asttokens (from snoop->topostats==2.3.2.dev487+g961c60ba)
Using cached asttokens-3.0.0-py3-none-any.whl.metadata (4.7 kB)
Collecting pure-eval (from stack_data->ipython<9.0.0,>=8.16.0->pySPM->AFMReader@ git+https://github.com/AFM-SPM/AFMReader@main->topostats==2.3.2.dev487+g961c60ba)
Using cached pure_eval-0.2.3-py3-none-any.whl.metadata (6.3 kB)
Collecting astunparse>=1.6.0 (from tensorflow->topostats==2.3.2.dev487+g961c60ba)
Using cached astunparse-1.6.3-py2.py3-none-any.whl.metadata (4.4 kB)
Collecting flatbuffers>=24.3.25 (from tensorflow->topostats==2.3.2.dev487+g961c60ba)
Using cached flatbuffers-25.2.10-py2.py3-none-any.whl.metadata (875 bytes)
Collecting gast!=0.5.0,!=0.5.1,!=0.5.2,>=0.2.1 (from tensorflow->topostats==2.3.2.dev487+g961c60ba)
Using cached gast-0.6.0-py3-none-any.whl.metadata (1.3 kB)
Collecting google-pasta>=0.1.1 (from tensorflow->topostats==2.3.2.dev487+g961c60ba)
Using cached google_pasta-0.2.0-py3-none-any.whl.metadata (814 bytes)
Collecting libclang>=13.0.0 (from tensorflow->topostats==2.3.2.dev487+g961c60ba)
Using cached libclang-18.1.1-py2.py3-none-manylinux2010_x86_64.whl.metadata (5.2 kB)
Collecting opt-einsum>=2.3.2 (from tensorflow->topostats==2.3.2.dev487+g961c60ba)
Using cached opt_einsum-3.4.0-py3-none-any.whl.metadata (6.3 kB)
Collecting protobuf!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<6.0.0dev,>=3.20.3 (from tensorflow->topostats==2.3.2.dev487+g961c60ba)
Downloading protobuf-5.29.5-cp38-abi3-manylinux2014_x86_64.whl.metadata (592 bytes)
Requirement already satisfied: setuptools in /home/neil/.virtualenvs/tmp-9b400ec0d8531bd/lib/python3.11/site-packages (from tensorflow->topostats==2.3.2.dev487+g961c60ba) (80.7.1)
Collecting termcolor>=1.1.0 (from tensorflow->topostats==2.3.2.dev487+g961c60ba)
Using cached termcolor-3.1.0-py3-none-any.whl.metadata (6.4 kB)
Collecting wrapt>=1.11.0 (from tensorflow->topostats==2.3.2.dev487+g961c60ba)
Using cached wrapt-1.17.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (6.4 kB)
Collecting grpcio<2.0,>=1.24.3 (from tensorflow->topostats==2.3.2.dev487+g961c60ba)
Downloading grpcio-1.73.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (3.8 kB)
Collecting tensorboard~=2.19.0 (from tensorflow->topostats==2.3.2.dev487+g961c60ba)
Using cached tensorboard-2.19.0-py3-none-any.whl.metadata (1.8 kB)
Collecting tensorflow-io-gcs-filesystem>=0.23.1 (from tensorflow->topostats==2.3.2.dev487+g961c60ba)
Using cached tensorflow_io_gcs_filesystem-0.37.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (14 kB)
Collecting markdown>=2.6.8 (from tensorboard~=2.19.0->tensorflow->topostats==2.3.2.dev487+g961c60ba)
Using cached markdown-3.8-py3-none-any.whl.metadata (5.1 kB)
Collecting tensorboard-data-server<0.8.0,>=0.7.0 (from tensorboard~=2.19.0->tensorflow->topostats==2.3.2.dev487+g961c60ba)
Using cached tensorboard_data_server-0.7.2-py3-none-manylinux_2_31_x86_64.whl.metadata (1.1 kB)
Collecting werkzeug>=1.0.1 (from tensorboard~=2.19.0->tensorflow->topostats==2.3.2.dev487+g961c60ba)
Using cached werkzeug-3.1.3-py3-none-any.whl.metadata (3.7 kB)
Requirement already satisfied: wheel<1.0,>=0.23.0 in /home/neil/.virtualenvs/tmp-9b400ec0d8531bd/lib/python3.11/site-packages (from astunparse>=1.6.0->tensorflow->topostats==2.3.2.dev487+g961c60ba) (0.45.1)
Collecting MarkupSafe>=2.1.1 (from werkzeug>=1.0.1->tensorboard~=2.19.0->tensorflow->topostats==2.3.2.dev487+g961c60ba)
Using cached MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.0 kB)
Collecting argparse>=1.4 (from topoly->topostats==2.3.2.dev487+g961c60ba)
Using cached argparse-1.4.0-py2.py3-none-any.whl.metadata (2.8 kB)
Collecting biopython>1.60 (from topoly->topostats==2.3.2.dev487+g961c60ba)
Using cached biopython-1.85-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (13 kB)
Using cached numpy-2.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (19.5 MB)
Using cached art-6.5-py3-none-any.whl (610 kB)
Downloading h5py-3.14.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.5 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.5/4.5 MB 19.3 MB/s eta 0:00:00
Using cached igor2-0.5.12-py3-none-any.whl (32 kB)
Using cached keras-3.10.0-py3-none-any.whl (1.4 MB)
Using cached absl_py-2.3.0-py3-none-any.whl (135 kB)
Using cached loguru-0.7.3-py3-none-any.whl (61 kB)
Downloading matplotlib-3.10.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (8.6 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.6/8.6 MB 18.8 MB/s eta 0:00:00
Using cached contourpy-1.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (326 kB)
Using cached cycler-0.12.1-py3-none-any.whl (8.3 kB)
Downloading fonttools-4.58.4-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (5.0 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 5.0/5.0 MB 17.6 MB/s eta 0:00:00
Using cached kiwisolver-1.4.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.4 MB)
Using cached packaging-25.0-py3-none-any.whl (66 kB)
Using cached pillow-11.2.1-cp311-cp311-manylinux_2_28_x86_64.whl (4.6 MB)
Using cached pyparsing-3.2.3-py3-none-any.whl (111 kB)
Using cached python_dateutil-2.9.0.post0-py2.py3-none-any.whl (229 kB)
Using cached six-1.17.0-py2.py3-none-any.whl (11 kB)
Using cached ml_dtypes-0.5.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.7 MB)
Using cached namex-0.1.0-py3-none-any.whl (5.9 kB)
Using cached optree-0.16.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (416 kB)
Downloading typing_extensions-4.14.0-py3-none-any.whl (43 kB)
Downloading pandas-2.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (12.4 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 12.4/12.4 MB 19.0 MB/s eta 0:00:00
Using cached pytz-2025.2-py2.py3-none-any.whl (509 kB)
Using cached tzdata-2025.2-py2.py3-none-any.whl (347 kB)
Using cached pyspm-0.6.3-py3-none-any.whl (284 kB)
Using cached ipython-8.37.0-py3-none-any.whl (831 kB)
Using cached prompt_toolkit-3.0.51-py3-none-any.whl (387 kB)
Using cached psutil-5.9.8-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (288 kB)
Downloading scikit_learn-1.7.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (12.9 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 12.9/12.9 MB 20.4 MB/s eta 0:00:00
Using cached seaborn-0.13.2-py3-none-any.whl (294 kB)
Using cached tqdm-4.67.1-py3-none-any.whl (78 kB)
Using cached jedi-0.19.2-py2.py3-none-any.whl (1.6 MB)
Using cached parso-0.8.4-py2.py3-none-any.whl (103 kB)
Using cached joblib-1.5.1-py3-none-any.whl (307 kB)
Using cached pexpect-4.9.0-py2.py3-none-any.whl (63 kB)
Using cached ptyprocess-0.7.0-py2.py3-none-any.whl (13 kB)
Using cached pygments-2.19.1-py3-none-any.whl (1.2 MB)
Using cached scikit_image-0.25.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (14.8 MB)
Using cached imageio-2.37.0-py3-none-any.whl (315 kB)
Using cached lazy_loader-0.4-py3-none-any.whl (12 kB)
Using cached networkx-3.5-py3-none-any.whl (2.0 MB)
Using cached scipy-1.15.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (37.7 MB)
Using cached threadpoolctl-3.6.0-py3-none-any.whl (18 kB)
Using cached tifffile-2025.6.11-py3-none-any.whl (230 kB)
Using cached traitlets-5.14.3-py3-none-any.whl (85 kB)
Using cached decorator-5.2.1-py3-none-any.whl (9.2 kB)
Using cached matplotlib_inline-0.1.7-py3-none-any.whl (9.9 kB)
Using cached PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (762 kB)
Using cached rich-14.0.0-py3-none-any.whl (243 kB)
Using cached markdown_it_py-3.0.0-py3-none-any.whl (87 kB)
Using cached mdurl-0.1.2-py3-none-any.whl (10.0 kB)
Downloading ruamel.yaml-0.18.14-py3-none-any.whl (118 kB)
Using cached ruamel.yaml.clib-0.2.12-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (739 kB)
Using cached schema-0.7.7-py2.py3-none-any.whl (18 kB)
Using cached skan-0.12.2-py3-none-any.whl (1.6 MB)
Downloading magicgui-0.10.1-py3-none-any.whl (128 kB)
Using cached docstring_parser-0.16-py3-none-any.whl (36 kB)
Using cached numba-0.61.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (3.8 MB)
Using cached llvmlite-0.44.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (42.4 MB)
Using cached openpyxl-3.1.5-py2.py3-none-any.whl (250 kB)
Using cached psygnal-0.13.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (842 kB)
Using cached QtPy-2.4.3-py3-none-any.whl (95 kB)
Downloading superqt-0.7.4-py3-none-any.whl (99 kB)
Using cached pyconify-0.2.1-py3-none-any.whl (19 kB)
Using cached toolz-1.0.0-py3-none-any.whl (56 kB)
Using cached et_xmlfile-2.0.0-py3-none-any.whl (18 kB)
Downloading requests-2.32.4-py3-none-any.whl (64 kB)
Using cached charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (147 kB)
Using cached idna-3.10-py3-none-any.whl (70 kB)
Using cached urllib3-2.4.0-py3-none-any.whl (128 kB)
Downloading certifi-2025.6.15-py3-none-any.whl (157 kB)
Using cached snoop-0.6.0-py3-none-any.whl (27 kB)
Using cached cheap_repr-0.5.2-py2.py3-none-any.whl (12 kB)
Using cached asttokens-3.0.0-py3-none-any.whl (26 kB)
Using cached executing-2.2.0-py2.py3-none-any.whl (26 kB)
Using cached stack_data-0.6.3-py3-none-any.whl (24 kB)
Using cached pure_eval-0.2.3-py3-none-any.whl (11 kB)
Using cached tensorflow-2.19.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (644.9 MB)
Downloading grpcio-1.73.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (6.0 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.0/6.0 MB 18.8 MB/s eta 0:00:00
Downloading protobuf-5.29.5-cp38-abi3-manylinux2014_x86_64.whl (319 kB)
Using cached tensorboard-2.19.0-py3-none-any.whl (5.5 MB)
Using cached tensorboard_data_server-0.7.2-py3-none-manylinux_2_31_x86_64.whl (6.6 MB)
Using cached astunparse-1.6.3-py2.py3-none-any.whl (12 kB)
Using cached flatbuffers-25.2.10-py2.py3-none-any.whl (30 kB)
Using cached gast-0.6.0-py3-none-any.whl (21 kB)
Using cached google_pasta-0.2.0-py3-none-any.whl (57 kB)
Using cached libclang-18.1.1-py2.py3-none-manylinux2010_x86_64.whl (24.5 MB)
Using cached markdown-3.8-py3-none-any.whl (106 kB)
Using cached opt_einsum-3.4.0-py3-none-any.whl (71 kB)
Using cached tensorflow_io_gcs_filesystem-0.37.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.1 MB)
Using cached termcolor-3.1.0-py3-none-any.whl (7.7 kB)
Using cached werkzeug-3.1.3-py3-none-any.whl (224 kB)
Using cached MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (23 kB)
Using cached wrapt-1.17.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (83 kB)
Using cached topoly-1.1.0-cp311-cp311-manylinux2014_x86_64.whl (9.5 MB)
Using cached argparse-1.4.0-py2.py3-none-any.whl (23 kB)
Using cached biopython-1.85-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.3 MB)
Using cached wcwidth-0.2.13-py2.py3-none-any.whl (34 kB)
Building wheels for collected packages: topostats, AFMReader, numpyencoder
Building editable for topostats (pyproject.toml) ... done
Created wheel for topostats: filename=topostats-2.3.2.dev487+g961c60ba-0.editable-py3-none-any.whl size=21467 sha256=c5329acafc4b76847054f0e79dd8fa28b87741977189e7fd11aa7959c04eb361
Stored in directory: /tmp/pip-ephem-wheel-cache-2w6avs_w/wheels/ad/b9/d8/198bcdf276462a076354fa6dc0adcb8db74d62bd5244802062
Building wheel for AFMReader (pyproject.toml) ... done
Created wheel for AFMReader: filename=afmreader-0.0.5-py3-none-any.whl size=39855 sha256=a2efab128221f84abdaeee021eb271a6a5ee770ee3955d15a952782710c3f904
Stored in directory: /tmp/pip-ephem-wheel-cache-2w6avs_w/wheels/ef/1f/21/1de01d80512345dbff924ecf07e0292d6e2c96d08d40d6ce6f
DEPRECATION: Building 'numpyencoder' using the legacy setup.py bdist_wheel mechanism, which will be removed in a future version. pip 25.3 will enforce this behaviour change. A possible replacement is to use the standardized build interface by setting the `--use-pep517` option, (possibly combined with `--no-build-isolation`), or adding a `pyproject.toml` file to the source tree of 'numpyencoder'. Discussion can be found at https://github.com/pypa/pip/issues/6334
Building wheel for numpyencoder (setup.py) ... done
Created wheel for numpyencoder: filename=numpyencoder-0.3.2-py3-none-any.whl size=3086 sha256=f7e6921a72b5d6dff4d0ad0cef698a095073da45b36a57bf2ea83a92101d5fc1
Stored in directory: /tmp/pip-ephem-wheel-cache-2w6avs_w/wheels/9c/31/f9/b1562a5fcf592993bdf6cb653aca01c4ed3d658d983d2ebd65
Successfully built topostats AFMReader numpyencoder
Installing collected packages: wcwidth, schema, pytz, pure-eval, ptyprocess, namex, libclang, flatbuffers, cheap-repr, argparse, wrapt, urllib3, tzdata, typing-extensions, traitlets, tqdm, toolz, threadpoolctl, termcolor, tensorflow-io-gcs-filesystem, tensorboard-data-server, six, ruamel.yaml.clib, pyyaml, pyparsing, pygments, psygnal, psutil, protobuf, prompt_toolkit, pillow, pexpect, parso, packaging, opt-einsum, numpy, networkx, mdurl, MarkupSafe, markdown, loguru, llvmlite, kiwisolver, joblib, idna, grpcio, gast, fonttools, executing, et-xmlfile, docstring-parser, decorator, cycler, charset_normalizer, certifi, asttokens, art, absl-py, werkzeug, tifffile, stack_data, snoop, scipy, ruamel.yaml, requests, qtpy, python-dateutil, optree, openpyxl, numpyencoder, numba, ml-dtypes, matplotlib-inline, markdown-it-py, lazy-loader, jedi, imageio, igor2, h5py, google-pasta, contourpy, biopython, astunparse, tensorboard, superqt, scikit-learn, scikit-image, rich, pyconify, pandas, matplotlib, ipython, topoly, seaborn, keras, tensorflow, pySPM, magicgui, skan, AFMReader, topostats
Successfully installed AFMReader-0.0.5 MarkupSafe-3.0.2 absl-py-2.3.0 argparse-1.4.0 art-6.5 asttokens-3.0.0 astunparse-1.6.3 biopython-1.85 certifi-2025.6.15 charset_normalizer-3.4.2 cheap-repr-0.5.2 contourpy-1.3.2 cycler-0.12.1 decorator-5.2.1 docstring-parser-0.16 et-xmlfile-2.0.0 executing-2.2.0 flatbuffers-25.2.10 fonttools-4.58.4 gast-0.6.0 google-pasta-0.2.0 grpcio-1.73.0 h5py-3.14.0 idna-3.10 igor2-0.5.12 imageio-2.37.0 ipython-8.37.0 jedi-0.19.2 joblib-1.5.1 keras-3.10.0 kiwisolver-1.4.8 lazy-loader-0.4 libclang-18.1.1 llvmlite-0.44.0 loguru-0.7.3 magicgui-0.10.1 markdown-3.8 markdown-it-py-3.0.0 matplotlib-3.10.3 matplotlib-inline-0.1.7 mdurl-0.1.2 ml-dtypes-0.5.1 namex-0.1.0 networkx-3.5 numba-0.61.2 numpy-2.0.2 numpyencoder-0.3.2 openpyxl-3.1.5 opt-einsum-3.4.0 optree-0.16.0 packaging-25.0 pandas-2.3.0 parso-0.8.4 pexpect-4.9.0 pillow-11.2.1 prompt_toolkit-3.0.51 protobuf-5.29.5 psutil-5.9.8 psygnal-0.13.0 ptyprocess-0.7.0 pure-eval-0.2.3 pySPM-0.6.3 pyconify-0.2.1 pygments-2.19.1 pyparsing-3.2.3 python-dateutil-2.9.0.post0 pytz-2025.2 pyyaml-6.0.2 qtpy-2.4.3 requests-2.32.4 rich-14.0.0 ruamel.yaml-0.18.14 ruamel.yaml.clib-0.2.12 schema-0.7.7 scikit-image-0.25.2 scikit-learn-1.7.0 scipy-1.15.3 seaborn-0.13.2 six-1.17.0 skan-0.12.2 snoop-0.6.0 stack_data-0.6.3 superqt-0.7.4 tensorboard-2.19.0 tensorboard-data-server-0.7.2 tensorflow-2.19.0 tensorflow-io-gcs-filesystem-0.37.1 termcolor-3.1.0 threadpoolctl-3.6.0 tifffile-2025.6.11 toolz-1.0.0 topoly-1.1.0 topostats-2.3.2.dev487+g961c60ba tqdm-4.67.1 traitlets-5.14.3 typing-extensions-4.14.0 tzdata-2025.2 urllib3-2.4.0 wcwidth-0.2.13 werkzeug-3.1.3 wrapt-1.17.2
10:47:05 am BST neil@haldane ~/tmp/TopoStats G main
(tmp-9b400ec0d8531bd) ❱ pip show topostats
Name: topostats
Version: 2.3.2.dev487+g961c60ba
Summary: Automated Analysis for Atomic Force Microscopy Images of Biomolecules
Home-page:
Author:
Author-email: TopoStats Team <[email protected]>, Alice Pyne <[email protected]>, Sylvia Whittle <[email protected]>, Neil Shephard <[email protected]>, Max Gamill <[email protected]>, Jean Du <[email protected]>
License: GNU Lesser GPLv3 only
Location: /home/neil/.virtualenvs/tmp-9b400ec0d8531bd/lib/python3.11/site-packages
Editable project location: /home/neil/tmp/TopoStats
Requires: AFMReader, art, h5py, keras, matplotlib, numpy, numpyencoder, pandas, pyyaml, ruamel.yaml, schema, scikit-image, scipy, seaborn, skan, snoop, tensorflow, topoly, tqdm
Required-by:
10:48:33 am BST neil@haldane ~/tmp/TopoStats G main
(tmp-9b400ec0d8531bd) ❱ pip show numpy | head -n20
Name: numpy
Version: 2.0.2
Summary: Fundamental package for array computing in Python
Home-page: https://numpy.org
Author: Travis E. Oliphant et al.
Author-email:
License: Copyright (c) 2005-2024, NumPy Developers.
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following
disclaimer in the documentation and/or other materials provided
with the distribution. I get Numpy 2.x issue was down to a dependency To check things work in this fresh install I then installed the test suite ( It could be that the wrong environment has been picked up by PyCharm. I don't use PyCharm so have no idea about how it creates and manages virtual environments. Re : Python 3.13We hope to support newer versions of Python > 3.11 once one of the packages we depend on supports this (see issue #927 where we are tracking this). |
Beta Was this translation helpful? Give feedback.
-
It’s 2.2.1, and comes with some Exceptions.
Numpy 1.26.4
Python 3.10
```
% topostats -v
Exception ignored in: <_io.FileIO name='/Users/sebastienjanel/Pasteur/Developpements/TopoStats/TopoStats-2025-06-16-12-28-51.log' mode='ab' closefd=True>
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/topostats/statistics.py", line 8, in <module>
LOGGER = setup_logger(LOGGER_NAME)
ResourceWarning: unclosed file <_io.TextIOWrapper name='/Users/sebastienjanel/Pasteur/Developpements/TopoStats/TopoStats-2025-06-16-12-28-51.log' mode='a' encoding='UTF-8'>
Exception ignored in: <_io.FileIO name='/Users/sebastienjanel/Pasteur/Developpements/TopoStats/TopoStats-2025-06-16-12-28-51.log' mode='ab' closefd=True>
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/topostats/processing.py", line 31, in <module>
LOGGER = setup_logger(LOGGER_NAME)
ResourceWarning: unclosed file <_io.TextIOWrapper name='/Users/sebastienjanel/Pasteur/Developpements/TopoStats/TopoStats-2025-06-16-12-28-51.log' mode='a' encoding='UTF-8'>
Installed version of TopoStats: 2.2.1
```
Actually `topostats -v` and `pip show topostats` actually return different versions, 2.2.1 vs 2.3.2.dev487+g961c60ba!
Test install do not work : `pip install -e .[tests]
zsh: no matches found: .[tests]`
|
Beta Was this translation helpful? Give feedback.
-
There is something strange going on with your virtual environments I think. You say you are using Python 3.10 but the output shows that when you call
...the key bit being What does Could it be that PyCharm has only activated the virtual environment within itself and not in the shell that is being used? |
Beta Was this translation helpful? Give feedback.
Ok I got it. Topostats was installed in the system version of Python, even though I was in the venv in PyCharm. I uninstalled it with
/Library/Frameworks/Python.framework/Versions/3.13/bin/python3 -m pip uninstall topostats
, then activated the venvsource .venv/bin/activate
, and reinstalledpip install -e .
Probably this was a previous system-wide, ghost installation.