Search code examples
pythondependenciescondapackage-managers

Possibility to trace back which packages hinder conda from installing most recent python version?


I have a quite large .yml file that I use to create a conda environment. However, with the current specifications, I only get Python 3.8. Is there any way to trace back which packages and/or their combination hinder conda from installing the most recent python version? I would be willing to sacrifice those packages if it means that I can use a faster python version. Here's my .yml file:

channels:
- conda-forge
- pyviz
- plotly
- pytorch
- ejolly
- districtdatalabs
- bokeh
- defaults
dependencies:
- bokeh
- python
- sklearn-pandas
- datalad
- tableone
- spyder
- scikit-learn
- nilearn
- nipype
- dash
- dash-bootstrap-components
- statannotations
- fastcluster
- pingouin
- mne
- tensorboardx
- neurokit2
- oct2py
- pybids
- yellowbrick
- pymer4
- plotly-orca
- plotly
- pytorch
- holoviews
- hvplot
- r-essentials
- r-matrixstats
- r-repr
- r-devtools
- jupyterlab
- r-base
- r-pma
- r-dendextend
- r-circlize
- r-reticulate
- pip
- pip:
  - xmltodict
  - adjustText
  - dash-cytoscape
  - brainrender
  - network_control
  - cca-zoo
  - bctpy
  - gemmr
  - gower
  - antropy
  - pyvis
  - distro
  - abagen
  - groupyr
  - clustergrammer
  - nisupply
  - fmriprep-docker
  - lckr-jupyterlab-variableinspector

Solution

  • First, if one wants a specific version, then declare it in the YAML. That way conflicts will arise and they can be reported.

    Second, conda - the CLI, not the ecosystem - has a poor track record for conflict reporting. Mamba, especially since v1.4.0 has vastly improved the user experience for this.

    Setting python=3.11, I see pymer4 is incompatible with this.

    $ mamba env create -n foo -f so-env.yaml
    
    Looking for: ['bokeh', 'python=3.11', 'sklearn-pandas', 'datalad', 'tableone', 'spyder', 'scikit-learn', 'nilearn', 'nipype', 'dash', 'dash-bootstrap-components', 'statannotations', 'fastcluster', 'pingouin', 'mne', 'tensorboardx', 'neurokit2', 'oct2py', 'pybids', 'yellowbrick', 'pymer4', 'plotly-orca', 'plotly', 'pytorch', 'holoviews', 'hvplot', 'r-essentials', 'r-matrixstats', 'r-repr', 'r-devtools', 'jupyterlab', 'r-base', 'r-pma', 'r-dendextend', 'r-circlize', 'r-reticulate', 'pip']
    
    
    Could not solve for environment specs
    The following packages are incompatible
    ├─ pymer4 is installable with the potential options
    │  ├─ pymer4 [0.7.1|0.7.2|...|0.7.6] would require
    │  │  └─ python >=3.8,<3.9.0a0 , which can be installed;
    │  ├─ pymer4 [0.7.7|0.7.8] would require
    │  │  ├─ python >=3.7,<3.8.0a0 , which can be installed;
    │  │  └─ python_abi 3.7.* *_cp37m, which can be installed;
    │  ├─ pymer4 [0.7.1|0.7.2|0.7.3|0.7.4|0.7.6] would require
    │  │  └─ python >=3.7,<3.8.0a0 , which can be installed;
    │  ├─ pymer4 [0.7.7|0.7.8] would require
    │  │  ├─ python >=3.9,<3.10.0a0 , which can be installed;
    │  │  └─ python_abi 3.9.* *_cp39, which can be installed;
    │  ├─ pymer4 [0.7.7|0.7.8|0.8.0.9001] would require
    │  │  ├─ python >=3.8,<3.9.0a0 , which can be installed;
    │  │  └─ python_abi 3.8.* *_cp38, which can be installed;
    │  ├─ pymer4 [0.7.1|0.7.2|0.7.3] would require
    │  │  └─ python >=3.6,<3.7.0a0 , which can be installed;
    │  └─ pymer4 0.7.6 would require
    │     └─ python >=3.9,<3.10.0a0 , which can be installed;
    └─ python 3.11**  is not installable because there are no viable options
       ├─ python [3.11.0|3.11.2|3.11.3|3.11.4] conflicts with any installable versions previously reported;
       └─ python [3.11.0|3.11.1|3.11.2|3.11.3|3.11.4] would require
          └─ python_abi 3.11.* *_cp311, which conflicts with any installable versions previously reported.
    

    That's not actually on Conda Forge, so it might be good to try getting it building there. It appears there is already an attempt started and they are looking for help.

    Otherwise, dropping pymer4 from the YAML enables the Conda portion to solve without issue. However, the PyPI packages then fail to install. That seems like a separate question though, and it does indicate the failing package directly (morphio).

    ERROR: Failed building wheel for morphio
    ERROR: Could not build wheels for morphio, which is required to install pyproject.toml-based projects
    
    failed
    
    CondaEnvException: Pip failed