Skip to content

Instantly share code, notes, and snippets.

What would you like to do?
Use flit metadata from
"""Temporary setuptools bridge
Don't use this except if you have a deadline or you encounter a bug.
import re
import setuptools
from pathlib import Path
from flit_core import common, config
from setuptools_scm.integration import find_files
field_names = dict(
{n: n for n in "name version author author_email license classifiers".split()},
def setup_args(config_path=Path("pyproject.toml")):
cfg = config.read_flit_config(config_path)
module = common.Module(cfg.module, config_path.parent)
metadata = common.make_metadata(module, cfg)
kwargs = {}
for st_field, metadata_field in field_names.items():
val = getattr(metadata, metadata_field, None)
if val is not None:
kwargs[st_field] = val
elif metadata_field not in {'license'}:
print(f'{metadata_field} not found in {dir(metadata)}')
kwargs["packages"] = setuptools.find_packages(include=[ + "*"])
if metadata.requires_dist:
kwargs["install_requires"] = [
req for req in metadata.requires_dist if "extra ==" not in req
if cfg.reqs_by_extra:
kwargs["extras_require"] = cfg.reqs_by_extra
scripts = cfg.entrypoints.get("console_scripts")
if scripts is not None:
kwargs["entry_points"] = dict(
console_scipts=[" = ".join(ep) for ep in scripts.items()]
kwargs["include_package_data"] = True
kwargs["package_data"] = { [
re.escape(f[len( + 1:]) for f in find_files(module.path)
return kwargs
# print(*[f'{p}={v!r}' for p, v in setup_args().items()], sep='\n')
Copy link

flying-sheep commented Jan 14, 2021

Looks like this:

$ pip install -e .
Obtaining file:///home/phil/Dev/Python/Single%20Cell/scanpy
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
  Installing backend dependencies ... done
    Preparing wheel metadata ... done
Installing collected packages: scanpy
  Attempting uninstall: scanpy
    Found existing installation: scanpy 1.6.1.dev132+gcea278dd
    Uninstalling scanpy-1.6.1.dev132+gcea278dd:
      Successfully uninstalled scanpy-1.6.1.dev132+gcea278dd
  Running develop for scanpy
Successfully installed scanpy

Copy link

ivirshup commented Jan 14, 2021

I ran

conda create -n scanpy-flit python=3.8 flit
conda activate scanpy-flit
pip install -e .

And got:

From pip install -e .

Obtaining file:///Users/isaac/github/scanpy
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
  Installing backend dependencies ... done
    Preparing wheel metadata ... done
Installing collected packages: scanpy
  Running develop for scanpy
Successfully installed scanpy

from python -c "import scanpy"

Traceback (most recent call last):
  File "/Users/isaac/github/scanpy/scanpy/", line 7, in <module>
    from setuptools_scm import get_version
ModuleNotFoundError: No module named 'setuptools_scm'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/isaac/github/scanpy/scanpy/", line 3, in <module>
    from ._metadata import __version__, __author__, __email__, within_flit
  File "/Users/isaac/github/scanpy/scanpy/", line 17, in <module>
    from ._compat import pkg_metadata
  File "/Users/isaac/github/scanpy/scanpy/", line 1, in <module>
    from packaging import version
ModuleNotFoundError: No module named 'packaging'

From conda list

# packages in environment at /Users/isaac/miniconda3/envs/scanpy-flit:
# Name                    Version                   Build  Channel
brotlipy                  0.7.0           py38h9ed2024_1003  
ca-certificates           2020.12.8            hecd8cb5_0  
certifi                   2020.12.5        py38hecd8cb5_0  
cffi                      1.14.4           py38h2125817_0  
chardet                   4.0.0           py38hecd8cb5_1003  
cryptography              3.3.1            py38hbcfaee0_0  
docutils                  0.16                     py38_1  
flit                      3.0.0                      py_0  
flit-core                 3.0.0                      py_0  
idna                      2.10                       py_0  
libcxx                    10.0.0                        1  
libedit                   3.1.20191231         h1de35cc_1  
libffi                    3.3                  hb1e8313_2  
ncurses                   6.2                  h0a44026_1  
openssl                   1.1.1i               h9ed2024_0  
pip                       20.3.3           py38hecd8cb5_0  
pycparser                 2.20                       py_2  
pyopenssl                 20.0.1             pyhd3eb1b0_1  
pysocks                   1.7.1                    py38_1  
python                    3.8.5                h26836e1_1  
pytoml                    0.1.21                     py_0  
readline                  8.0                  h1de35cc_0  
requests                  2.25.1             pyhd3eb1b0_0  
requests_download         0.1.2                      py_1  
scanpy                    1.7.0rc2.dev5+g1a51e659           dev_0    <develop>
setuptools                51.1.2           py38hecd8cb5_4  
six                       1.15.0           py38hecd8cb5_0  
sqlite                    3.33.0               hffcf06c_0  
tk                        8.6.10               hb0a8c7a_0  
urllib3                   1.26.2             pyhd3eb1b0_0  
wheel                     0.36.2             pyhd3eb1b0_0  
xz                        5.2.5                h1de35cc_0  
zlib                      1.2.11               h1de35cc_3  

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment