Official project repository for the Setuptools build system

Related tags

Build Toolssetuptools
Overview
tests Code style: Black https://img.shields.io/codecov/c/github/pypa/setuptools/master.svg?logo=codecov&logoColor=white https://tidelift.com/badges/github/pypa/setuptools?style=flat

See the Installation Instructions in the Python Packaging User's Guide for instructions on installing, upgrading, and uninstalling Setuptools.

Questions and comments should be directed to the distutils-sig mailing list. Bug reports and especially tested patches may be submitted directly to the bug tracker.

Code of Conduct

Everyone interacting in the setuptools project's codebases, issue trackers, chat rooms, and mailing lists is expected to follow the PSF Code of Conduct.

For Enterprise

Available as part of the Tidelift Subscription.

Setuptools and the maintainers of thousands of other packages are working with Tidelift to deliver one enterprise subscription that covers all of the open source you use.

Learn more.

Security Contact

To report a security vulnerability, please use the Tidelift security contact. Tidelift will coordinate the fix and disclosure.

Comments
  • Avoid full path enumeration on import of setuptools or pkg_resources?

    Avoid full path enumeration on import of setuptools or pkg_resources?

    Originally reported by: konstantint (Bitbucket: konstantint, GitHub: konstantint)


    At the moment on my machine, it takes about 1.28 seconds to do a bare import pkg_resources, 1.47 seconds to do a bare import setuptools, 1.36 seconds to do a bare from pkg_resources import load_entry_point and 1.25 seconds to do a bare from pkg_resources import load_entry_point.

    This obviously affects all of the python scripts that are installed as console entry points, because each and every one of them starts with a line like that. In code which does not rely on entry points this may be a problem whenever I want to use resource_filename to consistently access static data.

    I believe this problem is decently common, yet I did not find any issue or discussion, hence I'm creating one, hoping I'm not repeating what has been said already elsewhere unnecessarily.

    I am using Anaconda Python, which comes along with a fairly large package, alongside several of my own packages, which I commonly add my path via setup.py develop, however I do not believe this setup is anything out of the ordinary. There are 37 items on my sys.path at the moment. Profiling import pkg_resources shows that this leads to 76 calls to workingset.add_entry (timing at about a second), of which most of the time is spent in 466 calls to Distribution.from_location.

    Obviously, the reason for the problem lies in the two _call_aside methods at the end of pkg_resources which lead to a full scan of the python path at the moment when the package is imported, and the only way to alleviate it would be to somehow avoid or delay the need for this scan as much as possible.

    I see two straightforward remedies: a) Make the scanning lazy. After all, if all one needs is to find a particular package, the scan could stop as soon as the corresponding package is located. At the very least this would allow me to "fix" my ipython loading problem by moving it up in the path. This might break some import rules which do not respect the precedence of the path, which I'm not aware. b) Cache a precomputed index and update it lazily. Yes, this might requre some ad-hoc rules for resolving inconsistencies, and this may lead to ugly conflicts with external tools that attempt to install multiple versions of a package, but this will basically avoid the current startup delay in 99.99% of cases and solve so much of my problems, that I'd be willing to pay the price.

    Although both options might seem somewhat controversial, the problem itself seems to be serious enough to deserve at least some fix eventually (for example, I've recently discovered I'm reluctant to start ipython for short calculations because of its startup delay which I've now tracked back to this same issue).

    I'm contemplating making a separate utility, e.g. fast_pkg_resources, which would implement the strategy b) by simply caching calls to pkg_resources in an external file, yet I thought of raising the issue here to figure out whether someone has already addressed it, whether there are plans to do something about it in the setuptools core codebase, or perhaps I'm missing something obvious.


    • Bitbucket: https://bitbucket.org/pypa/setuptools/issue/510
    enhancement wontfix 
    opened by ghost 99
  • find_packages() doesn't find PEP 420 packages

    find_packages() doesn't find PEP 420 packages

    Originally reported by: gwideman (Bitbucket: gwideman, GitHub: gwideman)


    #!python
    
    setup(...
        packages=find_packages(..)
        )
    

    on the developer machine will fail to find packages that lack a __init__.py file, as is allowed in Python 3.3. However, such packages listed explicitly: packages=['mypkg'] do appear to get included and later installed.

    Note: When testing this, before each test be sure to delete all generated metadata, including that which setup may previously have placed in the original source directory, as it seems that setup may use metadata created on a previous run in order to include files.

    This is part of a general problem reported in issue #83, but I've logged it separately as it's specifically about setuptools.


    • Bitbucket: https://bitbucket.org/pypa/setuptools/issue/97
    bug help wanted major 
    opened by ghost 95
  • How to bootstrap setuptools from source

    How to bootstrap setuptools from source

    Hi, I'm a developer for the Spack package manager. We've had a setuptools package that has worked fine for a while now, and the vast majority of our Python packages depend on it. However, I went to update to the latest version of setuptools and noticed that it now depends on six, packaging, and appdirs. Unfortunately all 3 of these packages also depend on setuptools. six and packaging can fall back on distutils.core if necessary, but the setup.py for appdirs has a hard setuptools import.

    It seems to me like it is no longer possible to build setuptools from source. Is this correct??

    opened by adamjstewart 73
  • _NamespacePath object has no attribute sort (31.0.0)

    _NamespacePath object has no attribute sort (31.0.0)

    When pip installing a package that shares a namespace it fails out on 31.0.0 but installs fine on 28.8.0

        Traceback (most recent call last):
          File "<string>", line 1, in <module>
          File "/usr/lib/python3.5/site-packages/setuptools/__init__.py", line 10, in <module>
            from setuptools.extern.six.moves import filter, filterfalse, map
          File "/usr/lib/python3.5/site-packages/setuptools/extern/__init__.py", line 1, in <module>
            from pkg_resources.extern import VendorImporter
          File "/usr/lib/python3.5/site-packages/pkg_resources/__init__.py", line 3015, in <module>
            @_call_aside
          File "/usr/lib/python3.5/site-packages/pkg_resources/__init__.py", line 2999, in _call_aside
            f(*args, **kwargs)
          File "/usr/lib/python3.5/site-packages/pkg_resources/__init__.py", line 3043, in _initialize_master_working_set
            for dist in working_set
          File "/usr/lib/python3.5/site-packages/pkg_resources/__init__.py", line 3043, in <genexpr>
            for dist in working_set
          File "/usr/lib/python3.5/site-packages/pkg_resources/__init__.py", line 2573, in activate
            declare_namespace(pkg)
          File "/usr/lib/python3.5/site-packages/pkg_resources/__init__.py", line 2147, in declare_namespace
            _handle_ns(packageName, path_item)
          File "/usr/lib/python3.5/site-packages/pkg_resources/__init__.py", line 2087, in _handle_ns
            _rebuild_mod_path(path, packageName, module)
          File "/usr/lib/python3.5/site-packages/pkg_resources/__init__.py", line 2116, in _rebuild_mod_path
            orig_path.sort(key=position_in_sys_path)
        AttributeError: '_NamespacePath' object has no attribute 'sort'
    
    opened by jkbbwr 73
  • Discussion: support for pyproject.toml configuration

    Discussion: support for pyproject.toml configuration

    Over the last few months, I've been using setup.cfg more, and I find the syntax and types and such to be super counter-intuitive. I don't find TOML to be a breeze per se, but it's at least a lot clearer to me how to specify a string, a list, etc. We also hear a lot of cries to move towards supporting pyproject.toml as the "one file" for setup configuration, in favor of setup.cfg. I'm not terribly opposed to this, but I want to open up the discussion for a few options:

    1. Add pyproject.toml as the one true way to do declarative builds, moving all setuptools configuration over there and deprecating setup.cfg (partially what is discussed in #1160, and if we decide on that option we can move over to that issue).
    2. Add pyproject.toml as a second supported way to do a declarative configuration, alongside setup.cfg.
    3. Stay the course with setup.cfg indefinitely.

    I am deeply concerned with the large amount of churn that we're introducing into the Python packaging space, so I don't want to make a lot of changes for the sake of changes, but I do think that at least having the option to use a pyproject.toml would be a real benefit, so I'm basically in favor of option 2.

    I think the biggest downside of option 2 is that it means maintaining, testing and documenting three separate locations for all of our options - how to do it in setup.cfg, how to do it in pyproject.toml, and how to do it in setup.py. I think the hard part is going from 1 way to do everything to 2 ways. Our documentation is a mess anyway, but my beautiful vision for the future is that all our examples have "tabs" that allow you to toggle them between setup.cfg and setup.py. Adding a pyproject.toml in there would probably not be the worst thing.

    enhancement help wanted major Needs Implementation 
    opened by pganssle 64
  • Invalid or non-existent authentication information

    Invalid or non-existent authentication information

    When I run python setup.py sdist upload

    I always get:

    Submitting dist/xxxxxxx-0.1.4.tar.gz to https://upload.pypi.org/legacy/
    Upload failed (403): Invalid or non-existent authentication information.
    error: Upload failed (403): Invalid or non-existent authentication information.
    

    It never asks me to enter my username but only password. So I assume the username is the same as when I run "register".

    I am pretty sure that password I entered is correct because I can login https://pypi.python.org/pypi

    Could you please help? I am not new to pypi. I published several packages before. But now I am confused. What has changed recently?

    opened by tylerlong 50
  • 20.5.0+ breaks existing setup.py files - UndefinedEnvironmentName

    20.5.0+ breaks existing setup.py files - UndefinedEnvironmentName

    The latest 20.6.4 PyPI is breaking our setup.py files with the following exception:

    Traceback (most recent call last):
      File "setup.py", line 163, in <module>
        cmdclass={'test': PyTest},
      File "/opt/python/2.7.9/lib/python2.7/distutils/core.py", line 151, in setup
        dist.run_commands()
      File "/opt/python/2.7.9/lib/python2.7/distutils/dist.py", line 953, in run_commands
        self.run_command(cmd)
      File "/opt/python/2.7.9/lib/python2.7/distutils/dist.py", line 972, in run_command
        cmd_obj.run()
      File "/home/travis/virtualenv/python2.7.9/lib/python2.7/site-packages/setuptools/command/test.py", line 152, in run
        self.distribution.fetch_build_eggs(self.distribution.tests_require)
      File "/home/travis/virtualenv/python2.7.9/lib/python2.7/site-packages/setuptools/dist.py", line 313, in fetch_build_eggs
        replace_conflicting=True,
      File "/home/travis/virtualenv/python2.7.9/lib/python2.7/site-packages/pkg_resources/__init__.py", line 814, in resolve
        if req.marker and not req.marker.evaluate():
      File "/home/travis/virtualenv/python2.7.9/lib/python2.7/site-packages/pkg_resources/_vendor/packaging/markers.py", line 273, in evaluate
        return _evaluate_markers(self._markers, current_environment)
      File "/home/travis/virtualenv/python2.7.9/lib/python2.7/site-packages/pkg_resources/_vendor/packaging/markers.py", line 198, in _evaluate_markers
        lhs_value = _get_env(environment, lhs.value)
      File "/home/travis/virtualenv/python2.7.9/lib/python2.7/site-packages/pkg_resources/_vendor/packaging/markers.py", line 180, in _get_env
        "{0!r} does not exist in evaluation environment.".format(name)
    pkg_resources._vendor.packaging.markers.UndefinedEnvironmentName: 'extra' does not exist in evaluation environment.
    
    bug 
    opened by lnielsen 50
  • Newlines in the `description` field produce a malformed PKG-INFO

    Newlines in the `description` field produce a malformed PKG-INFO

    We discovered this accidentally by way of https://github.com/zopefoundation/zc.relation/issues/4#issuecomment-397532224: if you pass a string containing newlines to the description argument of setup(), setuptools will generate a malformed PKG-INFO.

    To reproduce:

    # setup.py
    from setuptools import setup
    setup(
        name='test-package',
        version='0.1',
        author='Blah Blah',
        author_email='[email protected]',
        description='description\n\n',
        py_modules=['blah'],
    )
    

    (The contents of blah.py do not matter, but the file should exist.)

    Run python setup.py sdist and the inspect test_package.egg-info/PKG-INFO. For me, with setuptools 39.1.0, it looks like this:

    Metadata-Version: 1.0
    Name: test-package
    Version: 0.1
    Summary: description
    
    
    Home-page: UNKNOWN
    Author: Blah Blah
    Author-email: [email protected]
    License: UNKNOWN
    Description: UNKNOWN
    Platform: UNKNOWN
    

    The extra newlines lead tools to treat the rest of the PKG-INFO as a long_description.

    I would expect setuptools to complain about the newlines in the description field, or at least escape them properly (i.e. prepend whitespace, like it does for the long_description field).

    bug help wanted Needs Implementation 
    opened by mgedmin 42
  • Bootstrap script unable to locate releases following 20.10.0 release

    Bootstrap script unable to locate releases following 20.10.0 release

    How to test:

    Download

    https://bootstrap.pypa.io/bootstrap-buildout.py

    At the time of this ticket, __version__ of this file is 2015-07-01.

    Run

    python bootstrap-buildout.py

    You get

    Downloading https://pypi.python.org/packages/source/s/setuptools/setuptools-20.10.1.zip
    Extracting in /tmp/tmpIKldPD
    Traceback (most recent call last):
      File "bootstrap-buildout.py", line 117, in <module>
        ez['use_setuptools'](**setup_args)
      File "<string>", line 173, in use_setuptools
      File "<string>", line 124, in _do_download
      File "<string>", line 64, in _build_egg
      File "/usr/lib/python2.7/contextlib.py", line 17, in __enter__
        return self.gen.next()
      File "<string>", line 103, in archive_context
      File "/usr/lib/python2.7/zipfile.py", line 714, in __init__
        self._GetContents()
      File "/usr/lib/python2.7/zipfile.py", line 748, in _GetContents
        self._RealGetContents()
      File "/usr/lib/python2.7/zipfile.py", line 763, in _RealGetContents
        raise BadZipfile, "File is not a zip file"
    zipfile.BadZipfile: File is not a zip file
    

    You get the same error with 20.10.0.

    python bootstrap-buildout.py --setuptools-version=20.10.0

    Downloading https://pypi.python.org/packages/source/s/setuptools/setuptools-20.10.0.zip
    Extracting in /tmp/tmp6G6ZVT
    Traceback (most recent call last):
      File "bootstrap-buildout.py", line 117, in <module>
        ez['use_setuptools'](**setup_args)
      File "<string>", line 173, in use_setuptools
      File "<string>", line 124, in _do_download
      File "<string>", line 64, in _build_egg
      File "/usr/lib/python2.7/contextlib.py", line 17, in __enter__
        return self.gen.next()
      File "<string>", line 103, in archive_context
      File "/usr/lib/python2.7/zipfile.py", line 714, in __init__
        self._GetContents()
      File "/usr/lib/python2.7/zipfile.py", line 748, in _GetContents
        self._RealGetContents()
      File "/usr/lib/python2.7/zipfile.py", line 763, in _RealGetContents
        raise BadZipfile, "File is not a zip file"
    zipfile.BadZipfile: File is not a zip file
    

    20.9.0 works fine, so this bug was introduced in 20.10.x.

    python bootstrap-buildout.py --setuptools-version=20.9.0

    Downloading https://pypi.python.org/packages/source/s/setuptools/setuptools-20.9.0.zip
    Extracting in /tmp/tmpXrDIjV
    Now working in /tmp/tmpXrDIjV/setuptools-20.9.0
    Building a Setuptools egg in /tmp/bootstrap-OVHpkN
    warning: no files found matching '*' under directory 'setuptools/_vendor'
    warning: no files found matching '*.txt'
    /tmp/bootstrap-OVHpkN/setuptools-20.9.0-py2.7.egg
    
    opened by idgserpro 42
  • Support pyproject.toml-style configuration (PEP 621) - Round 2

    Support pyproject.toml-style configuration (PEP 621) - Round 2

    Summary of changes

    Based on the experience acquired in #2924, I created this PR as a simplification (please check the discussion there for details). There are many individual steps, but the following image illustrates how they are organised in 4 main groups of stacked changes:

    a) https://github.com/abravalheri/setuptools/compare/1a1397a4...4a986086: Update build_meta to use dist objects instead of simply running setup.py b) https://github.com/abravalheri/setuptools/compare/4a986086...7fe7a419: Separate setup.cfg parsing and extract common post-processing functions

    (new vendorised packages)

    c) https://github.com/abravalheri/setuptools/compare/fab3b790...56665563: Add means to apply configuration from pyproject.toml files d) https://github.com/abravalheri/setuptools/compare/7fe7a419...d34794d7: Integrate pyproject.toml configuration into existing classes

    Finally there is a completely non-required group of changes that only adds some type hints to improve (my) level of confidence in the implementation of the setuptools.config sub-package: e) https://github.com/abravalheri/setuptools/compare/d34794d7...0aff4ea4: Add some type hints to the setuptools.config subpackage

    image

    Unfortunately GitHub does not provide tools to facilitate the review of stacked changes/PRs, but I am open to suggestions on how to facilitate the review. I hope that this organisation in groups makes sense and help in the process.

    I also have another branch with a proof-of-concept where I remove setuptools' own setup.cfg and add all the existing configurations in the pyproject.toml.

    Closes #1688, #2671 (mostly... see discussion bellow).

    This PR adds 2 vendorised dependencies: tomli and validate-pyproject.

    Pull Request Checklist

    opened by abravalheri 41
  • setuptools pkg_resources fails to detect version properly

    setuptools pkg_resources fails to detect version properly

    Originally reported by: Eric89GXL (Bitbucket: Eric89GXL, GitHub: Eric89GXL)


    When installing a package:

      File "/home/larsoner/.local/lib/python2.7/site-packages/setuptools/dist.py", line 268, in __init__
        self.fetch_build_eggs(attrs['setup_requires'])
      File "/home/larsoner/.local/lib/python2.7/site-packages/setuptools/dist.py", line 313, in fetch_build_eggs
        replace_conflicting=True,
      File "/home/larsoner/.local/lib/python2.7/site-packages/pkg_resources/__init__.py", line 836, in resolve
        dist = best[req.key] = env.best_match(req, ws, installer)
      File "/home/larsoner/.local/lib/python2.7/site-packages/pkg_resources/__init__.py", line 1074, in best_match
        dist = working_set.find(req)
      File "/home/larsoner/.local/lib/python2.7/site-packages/pkg_resources/__init__.py", line 711, in find
        raise VersionConflict(dist, req)
    pkg_resources.VersionConflict: (numpy 1.11.0.dev0-2329eae (/home/larsoner/.local/lib/python2.7/site-packages), Requirement.parse('numpy>=1.6.1'))
    

    In other words, my numpy 1.11.0.dev0 is not seen as satisfying a >= 1.6.1 version requirement. It seems like using disutils.version.LooseVersion or so should solve this. I'm happy to look into making a PR if this seems like the right solution.


    • Bitbucket: https://bitbucket.org/pypa/setuptools/issue/419
    bug major 
    opened by ghost 41
  • [FR] requiring 32-bit or 64-bit Python in setuptools.setup

    [FR] requiring 32-bit or 64-bit Python in setuptools.setup

    What's the problem this feature will solve?

    Sometimes in life, one finds oneself doing major software archaeology with code from a decade ago. 🥲

    OpenOPC-Python3x works with pywin32, which I have discovered only works with 32-bit Python. I confirmed this to be true with rigorous testing, and recorded it here https://github.com/ya-mouse/openopc/issues/22.

    Now, in my package where I import OpenOPC and pywin32, I would like to use setuptools to enforce a 32-bit dependency.

    Describe the solution you'd like

    setuptools.setup has the python_requires kwarg to require a certain version range of Python.

    I think it would be good to add processor_type or something similar to enforce Python being 32-bit, 64-bit, etc.

    Alternative Solutions

    No response

    Additional context

    No response

    Code of Conduct

    • [X] I agree to follow the PSF Code of Conduct
    enhancement Needs Triage 
    opened by jamesbraza 0
  • User not warned/informed about version normalization

    User not warned/informed about version normalization

    setuptools version

    latest

    Python version

    3.9.2

    OS

    GNU/Linux Debian

    Additional environment information

    No response

    Description

    I was redirected from this pip issue into here. Not sure if I'm correct here. There is also an Issue about the topic in the SemVer repo.

    In my pyproject.toml I specified the version that way.

    [project]
    name = "Hyperorg"
    version = "0.0.0-a7"
    

    Please note that there is a - between major.minor.patch (0.0.0) and the pre-release (a7). But when installing that package the - is ignored and the version converted into 0.0.0a7.

    Defaulting to user installation because normal site-packages is not writeable
    Obtaining file:///home/user/ownCloud/my.work/hyperorg
      Installing build dependencies ... done
      Checking if build backend supports build_editable ... done
      Getting requirements to build editable ... done
      Installing backend dependencies ... done
      Preparing editable metadata (pyproject.toml) ... done
    ...
    Building wheels for collected packages: Hyperorg
      Building editable for Hyperorg (pyproject.toml) ... done
      Created wheel for Hyperorg: filename=Hyperorg-0.0.0a7-0.editable-py3-none-any.whl size=28823 sha256=1583ed9065e32d744de48aa238573ba73261847f21f6f2392b14531e41ed270b
      Stored in directory: /tmp/pip-ephem-wheel-cache-40fuuce2/wheels/5f/2b/4e/da5701aa1703d6fcd24e8e2650399fa8b7b0f51407e60776c6
    ...
    Successfully installed Hyperorg-0.0.0a7
    
    $ cat pyproject.toml | grep a7
    version = "0.0.0-a7"
    

    You can see in the output of pip that the version number used is different from the number I specified in my pyproject.toml.

    Please note that this breaks Semantiv Versioning. The hyphen is mandatory. I'm aware of thhe paragraph in PEP440 mentioning this exception.

    Expected behavior

    I'm sure there are reason why you do it that way.

    But you have to inform the users when modifying a specification he made in its pyproject.toml. This should throw a warning when you take the version string and modify it.

    How to Reproduce

    s.o.

    Output

    s.o.

    Needs Triage Needs Discussion 
    opened by buhtz 7
  • [BUG] Build process fails with

    [BUG] Build process fails with "AttributeError module has no attribute '__version__'"

    setuptools version

    setuptools>=61.0.0

    Python version

    Both observed in Python 3.10 and 3.11

    OS

    Linux Ubuntu, macOS

    Additional environment information

    This is issue has been observed both on local machine running macOS and on GitHub Actions.

    Description

    Recent versions of setuptools for some reason handles the version info of Python packages differently than earlier versions, which causes the package builder to break instantly.

    In order to resolve the issue temporarily, I had to downgrade the build system in my projects to setuptools==60.10.0 in pyproject.toml.

    Expected behavior

    When I run tox or python3 -m build, either on local machine or on GitHub Actions, I expect the package builder to run without issues.

    How to Reproduce

    When I try to build packages for two of my projects...

    • https://github.com/jakob-bagterp/timer-for-python
    • https://github.com/jakob-bagterp/browserist

    ... and let's take the first project as an example:

    • Set setuptools>=61.00.0 or later versions in pyproject.toml
    • Run tox from the command prompt
    • The build process fails (full error log below): AttributeError: module 'timer' has no attribute '__version__'

    But it doesn't fail with an earlier version:

    • Set setuptools==60.10.0 in pyproject.toml
    • Run tox from the command prompt
    • The build process complex without issues
    Screenshot 2023-01-03 at 21 51 09

    Output

    packaging backend failed (code=1), with AttributeError: module 'timer' has no attribute '__version__'
    Traceback (most recent call last):
      File "/Users/jakobbagterp/Documents/Kodeprojekter/timer-for-python/.tox/.pkg/lib/python3.11/site-packages/setuptools/config/expand.py", line 84, in __getattr__
        return next(ast.literal_eval(value) for value in matching_values)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    StopIteration
    
    The above exception was the direct cause of the following exception:
    
    Traceback (most recent call last):
      File "/Users/jakobbagterp/Documents/Kodeprojekter/timer-for-python/.tox/.pkg/lib/python3.11/site-packages/setuptools/config/expand.py", line 183, in read_attr
        return getattr(StaticModule(module_name, spec), attr_name)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/Users/jakobbagterp/Documents/Kodeprojekter/timer-for-python/.tox/.pkg/lib/python3.11/site-packages/setuptools/config/expand.py", line 86, in __getattr__
        raise AttributeError(f"{self.name} has no attribute {attr}") from e
    AttributeError: timer has no attribute __version__
    
    During handling of the above exception, another exception occurred:
    
    Traceback (most recent call last):
      File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/pyproject_api/_backend.py", line 90, in run
        outcome = backend_proxy(parsed_message["cmd"], **parsed_message["kwargs"])
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/pyproject_api/_backend.py", line 32, in __call__
        return getattr(on_object, name)(*args, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/Users/jakobbagterp/Documents/Kodeprojekter/timer-for-python/.tox/.pkg/lib/python3.11/site-packages/setuptools/build_meta.py", line 188, in prepare_metadata_for_build_wheel
        self.run_setup()
      File "/Users/jakobbagterp/Documents/Kodeprojekter/timer-for-python/.tox/.pkg/lib/python3.11/site-packages/setuptools/build_meta.py", line 174, in run_setup
        exec(compile(code, __file__, 'exec'), locals())
      File "setup.py", line 1, in <module>
      File "/Users/jakobbagterp/Documents/Kodeprojekter/timer-for-python/.tox/.pkg/lib/python3.11/site-packages/setuptools/__init__.py", line 77, in setup
        return distutils.core.setup(**attrs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/Users/jakobbagterp/Documents/Kodeprojekter/timer-for-python/.tox/.pkg/lib/python3.11/site-packages/setuptools/_distutils/core.py", line 122, in setup
        dist.parse_config_files()
      File "/Users/jakobbagterp/Documents/Kodeprojekter/timer-for-python/.tox/.pkg/lib/python3.11/site-packages/_virtualenv.py", line 21, in parse_config_files
        result = old_parse_config_files(self, *args, **kwargs)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/Users/jakobbagterp/Documents/Kodeprojekter/timer-for-python/.tox/.pkg/lib/python3.11/site-packages/setuptools/dist.py", line 832, in parse_config_files
        setupcfg.parse_configuration(
      File "/Users/jakobbagterp/Documents/Kodeprojekter/timer-for-python/.tox/.pkg/lib/python3.11/site-packages/setuptools/config/setupcfg.py", line 167, in parse_configuration
        meta.parse()
      File "/Users/jakobbagterp/Documents/Kodeprojekter/timer-for-python/.tox/.pkg/lib/python3.11/site-packages/setuptools/config/setupcfg.py", line 446, in parse
        section_parser_method(section_options)
      File "/Users/jakobbagterp/Documents/Kodeprojekter/timer-for-python/.tox/.pkg/lib/python3.11/site-packages/setuptools/config/setupcfg.py", line 417, in parse_section
        self[name] = value
        ~~~~^^^^^^
      File "/Users/jakobbagterp/Documents/Kodeprojekter/timer-for-python/.tox/.pkg/lib/python3.11/site-packages/setuptools/config/setupcfg.py", line 238, in __setitem__
        value = parser(value)
                ^^^^^^^^^^^^^
      File "/Users/jakobbagterp/Documents/Kodeprojekter/timer-for-python/.tox/.pkg/lib/python3.11/site-packages/setuptools/config/setupcfg.py", line 552, in _parse_version
        return expand.version(self._parse_attr(value, self.package_dir, self.root_dir))
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/Users/jakobbagterp/Documents/Kodeprojekter/timer-for-python/.tox/.pkg/lib/python3.11/site-packages/setuptools/config/setupcfg.py", line 372, in _parse_attr
        return expand.read_attr(attr_desc, package_dir, root_dir)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/Users/jakobbagterp/Documents/Kodeprojekter/timer-for-python/.tox/.pkg/lib/python3.11/site-packages/setuptools/config/expand.py", line 187, in read_attr
        return getattr(module, attr_name)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^
    AttributeError: module 'timer' has no attribute '__version__'
    Backend: run command prepare_metadata_for_build_wheel with args {'metadata_directory': '/Users/jakobbagterp/Documents/Kodeprojekter/timer-for-python/.tox/.pkg/.meta', 'config_settings': {'--build-option': []}}
    Backend: Wrote response {'code': 1, 'exc_type': 'AttributeError', 'exc_msg': "module 'timer' has no attribute '__version__'"} to /var/folders/5g/0kzgm9nd223464438xdllc6c0000gp/T/pep517_prepare_metadata_for_build_wheel-srk1c3j2.json
    py310: FAIL ✖ in 37.52 seconds
    
    bug Needs Repro 
    opened by jakob-bagterp 6
  • [BUG] 'MinimalDistribution' object has no attribute 'set_defaults'

    [BUG] 'MinimalDistribution' object has no attribute 'set_defaults'

    setuptools version

    setuptools>=65.6.0

    Python version

    3.10.9

    OS

    NixOS Unstable (Linux 6.1.2)

    Additional environment information

    build==0.9.0 packaging==22.0 pep517==0.13.0 tomli==2.0.1

    Description

    Trying to build clevercsv I run into the following exception.

    Traceback (most recent call last):
      File "/build/source/nix_run_setup", line 8, in <module>
        exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\\r\\n', '\\n'), __file__, 'exec'))
      File "setup.py", line 99, in <module>
        setup(
      File "/nix/store/rchyyrj7fj8rrjmj11pd3d9p7cb9ss1h-python3.10-setuptools-65.6.3/lib/python3.10/site-packages/setuptools/__init__.py", line 86, in setup
        _install_setup_requires(attrs)
      File "/nix/store/rchyyrj7fj8rrjmj11pd3d9p7cb9ss1h-python3.10-setuptools-65.6.3/lib/python3.10/site-packages/setuptools/__init__.py", line 75, in _install_setup_requires
        dist = MinimalDistribution(attrs)
      File "/nix/store/rchyyrj7fj8rrjmj11pd3d9p7cb9ss1h-python3.10-setuptools-65.6.3/lib/python3.10/site-packages/setuptools/__init__.py", line 59, in __init__
        self.set_defaults._disable()
    AttributeError: 'MinimalDistribution' object has no attribute 'set_defaults'
    

    I bisected this problem to a merge of distutils that first appeared in 65.6.0:

    9b8a6ef60b2b490bcf60b9dd7f0d43d46f49e489 is the first bad commit
    commit 9b8a6ef60b2b490bcf60b9dd7f0d43d46f49e489
    Merge: a0e8e53c e0787fad
    Author: Jason R. Coombs <[email protected]>
    Date:   Sun Nov 13 14:37:35 2022 -0500
    
        Merge https://github.com/pypa/distutils into distutils-e0787fa
    
     setuptools/_distutils/README                       |  11 --
     setuptools/_distutils/__init__.py                  |  12 +-
     setuptools/_distutils/_collections.py              | 138 +++++++++++++++++++++
     setuptools/_distutils/_log.py                      |   4 +
     setuptools/_distutils/_msvccompiler.py             |   8 +-
     setuptools/_distutils/archive_util.py              |   8 +-
     setuptools/_distutils/bcppcompiler.py              |  12 +-
     setuptools/_distutils/ccompiler.py                 |  14 +--
     setuptools/_distutils/cmd.py                       |  19 ++-
     setuptools/_distutils/command/bdist.py             |   8 +-
     setuptools/_distutils/command/bdist_dumb.py        |  12 +-
     setuptools/_distutils/command/bdist_rpm.py         |  12 +-
     setuptools/_distutils/command/build.py             |   8 +-
     setuptools/_distutils/command/build_clib.py        |  12 +-
     setuptools/_distutils/command/build_ext.py         |  34 ++---
     setuptools/_distutils/command/build_py.py          |  12 +-
     setuptools/_distutils/command/build_scripts.py     |   8 +-
     setuptools/_distutils/command/check.py             |   4 +-
     setuptools/_distutils/command/clean.py             |   8 +-
     setuptools/_distutils/command/config.py            |  18 +--
     setuptools/_distutils/command/install.py           |  20 +--
     setuptools/_distutils/command/install_data.py      |   4 +-
     setuptools/_distutils/command/install_egg_info.py  |   5 +-
     setuptools/_distutils/command/install_headers.py   |   2 +-
     setuptools/_distutils/command/install_lib.py       |   6 +-
     setuptools/_distutils/command/install_scripts.py   |   4 +-
     setuptools/_distutils/command/register.py          |  18 +--
     setuptools/_distutils/command/sdist.py             |  20 +--
     setuptools/_distutils/command/upload.py            |  20 +--
     setuptools/_distutils/config.py                    |   2 +-
     setuptools/_distutils/core.py                      |  12 +-
     setuptools/_distutils/cygwinccompiler.py           |  82 ++++++------
     setuptools/_distutils/dep_util.py                  |   2 +-
     setuptools/_distutils/dir_util.py                  |   6 +-
     setuptools/_distutils/dist.py                      |  17 +--
     setuptools/_distutils/fancy_getopt.py              |   2 +-
     setuptools/_distutils/file_util.py                 |   4 +-
     setuptools/_distutils/filelist.py                  |  22 ++--
     setuptools/_distutils/log.py                       |  78 +++---------
     setuptools/_distutils/msvc9compiler.py             |   8 +-
     setuptools/_distutils/msvccompiler.py              |   6 +-
     setuptools/_distutils/spawn.py                     |   6 +-
     setuptools/_distutils/sysconfig.py                 |   8 +-
     setuptools/_distutils/tests/support.py             |  28 +----
     setuptools/_distutils/tests/test_archive_util.py   |   2 +-
     setuptools/_distutils/tests/test_bdist_dumb.py     |   1 -
     setuptools/_distutils/tests/test_bdist_rpm.py      |   1 -
     setuptools/_distutils/tests/test_build.py          |   2 +-
     setuptools/_distutils/tests/test_build_clib.py     |   2 +-
     setuptools/_distutils/tests/test_build_ext.py      |   3 +-
     setuptools/_distutils/tests/test_build_py.py       |  22 ++--
     setuptools/_distutils/tests/test_build_scripts.py  |   2 +-
     setuptools/_distutils/tests/test_check.py          |   2 +-
     setuptools/_distutils/tests/test_clean.py          |   2 +-
     setuptools/_distutils/tests/test_cmd.py            |  21 +---
     setuptools/_distutils/tests/test_config.py         |   6 +-
     setuptools/_distutils/tests/test_config_cmd.py     |   4 +-
     setuptools/_distutils/tests/test_core.py           |  21 +---
     setuptools/_distutils/tests/test_dir_util.py       |  33 ++---
     setuptools/_distutils/tests/test_dist.py           |  45 +++----
     setuptools/_distutils/tests/test_file_util.py      |  20 +--
     setuptools/_distutils/tests/test_filelist.py       |  75 ++++++-----
     setuptools/_distutils/tests/test_install.py        |  18 +--
     setuptools/_distutils/tests/test_install_data.py   |   1 -
     .../_distutils/tests/test_install_headers.py       |   1 -
     setuptools/_distutils/tests/test_install_lib.py    |   5 +-
     .../_distutils/tests/test_install_scripts.py       |   2 +-
     setuptools/_distutils/tests/test_log.py            |  53 ++------
     setuptools/_distutils/tests/test_register.py       |  11 +-
     setuptools/_distutils/tests/test_sdist.py          |  44 +++----
     setuptools/_distutils/tests/test_spawn.py          |   2 +-
     setuptools/_distutils/tests/test_upload.py         |  15 ++-
     setuptools/_distutils/unixccompiler.py             |  10 +-
     setuptools/_distutils/util.py                      |   8 +-
     setuptools/_distutils/versionpredicate.py          |  10 +-
     75 files changed, 557 insertions(+), 631 deletions(-)
     delete mode 100644 setuptools/_distutils/README
     create mode 100644 setuptools/_distutils/_log.py
    

    Also reported at clevercsv in https://github.com/alan-turing-institute/CleverCSV/issues/77.

    Expected behavior

    The build should not fail with an exception.

    How to Reproduce

    git clone https://github.com/alan-turing-institute/CleverCSV clevercsv
    cd clevercsv
    python -m venv venv
    source venv/bin/activate
    pip install build wheel "setuptools>=65.6.0" # breaks!
    python -m build --no-isolation
    pip install "setuptools<65.6.0" # works!
    python -m build --no-isolation
    

    Output

    Cloning into 'clevercsv'...
    remote: Enumerating objects: 3696, done.
    remote: Counting objects: 100% (682/682), done.
    remote: Compressing objects: 100% (297/297), done.
    remote: Total 3696 (delta 400), reused 579 (delta 370), pack-reused 3014
    Receiving objects: 100% (3696/3696), 2.38 MiB | 9.95 MiB/s, done.
    Resolving deltas: 100% (2413/2413), done.
    Collecting build
      Using cached build-0.9.0-py3-none-any.whl (17 kB)
    Collecting wheel
      Using cached wheel-0.38.4-py3-none-any.whl (36 kB)
    Collecting setuptools>=65.6.0
      Using cached setuptools-65.6.3-py3-none-any.whl (1.2 MB)
    Collecting packaging>=19.0
      Using cached packaging-22.0-py3-none-any.whl (42 kB)
    Collecting tomli>=1.0.0
      Using cached tomli-2.0.1-py3-none-any.whl (12 kB)
    Collecting pep517>=0.9.1
      Using cached pep517-0.13.0-py3-none-any.whl (18 kB)
    Installing collected packages: wheel, tomli, setuptools, packaging, pep517, build
      Attempting uninstall: setuptools
        Found existing installation: setuptools 65.5.0
        Uninstalling setuptools-65.5.0:
          Successfully uninstalled setuptools-65.5.0
    Successfully installed build-0.9.0 packaging-22.0 pep517-0.13.0 setuptools-65.6.3 tomli-2.0.1 wheel-0.38.4
    * Getting build dependencies for sdist...
    Traceback (most recent call last):
      File "/tmp/clevercsv/venv/lib/python3.10/site-packages/pep517/in_process/_in_process.py", line 351, in <module>
        main()
      File "/tmp/clevercsv/venv/lib/python3.10/site-packages/pep517/in_process/_in_process.py", line 333, in main
        json_out['return_val'] = hook(**hook_input['kwargs'])
      File "/tmp/clevercsv/venv/lib/python3.10/site-packages/pep517/in_process/_in_process.py", line 285, in get_requires_for_build_sdist
        return hook(config_settings)
      File "/tmp/clevercsv/venv/lib/python3.10/site-packages/setuptools/build_meta.py", line 341, in get_requires_for_build_sdist
        return self._get_build_requires(config_settings, requirements=[])
      File "/tmp/clevercsv/venv/lib/python3.10/site-packages/setuptools/build_meta.py", line 320, in _get_build_requires
        self.run_setup()
      File "/tmp/clevercsv/venv/lib/python3.10/site-packages/setuptools/build_meta.py", line 484, in run_setup
        super(_BuildMetaLegacyBackend,
      File "/tmp/clevercsv/venv/lib/python3.10/site-packages/setuptools/build_meta.py", line 335, in run_setup
        exec(code, locals())
      File "<string>", line 99, in <module>
      File "/tmp/clevercsv/venv/lib/python3.10/site-packages/setuptools/__init__.py", line 86, in setup
        _install_setup_requires(attrs)
      File "/tmp/clevercsv/venv/lib/python3.10/site-packages/setuptools/__init__.py", line 75, in _install_setup_requires
        dist = MinimalDistribution(attrs)
      File "/tmp/clevercsv/venv/lib/python3.10/site-packages/setuptools/__init__.py", line 59, in __init__
        self.set_defaults._disable()
    AttributeError: 'MinimalDistribution' object has no attribute 'set_defaults'
    
    ERROR Backend subprocess exited when trying to invoke get_requires_for_build_sdist
    Collecting setuptools<65.6.0
      Using cached setuptools-65.5.1-py3-none-any.whl (1.2 MB)
    Installing collected packages: setuptools
      Attempting uninstall: setuptools
        Found existing installation: setuptools 65.6.3
        Uninstalling setuptools-65.6.3:
          Successfully uninstalled setuptools-65.6.3
    Successfully installed setuptools-65.5.1
    * Getting build dependencies for sdist...
    running egg_info
    creating clevercsv.egg-info
    writing clevercsv.egg-info/PKG-INFO
    writing dependency_links to clevercsv.egg-info/dependency_links.txt
    writing entry points to clevercsv.egg-info/entry_points.txt
    writing requirements to clevercsv.egg-info/requires.txt
    writing top-level names to clevercsv.egg-info/top_level.txt
    writing manifest file 'clevercsv.egg-info/SOURCES.txt'
    reading manifest file 'clevercsv.egg-info/SOURCES.txt'
    reading manifest template 'MANIFEST.in'
    warning: no files found matching 'requirements.txt'
    warning: no files found matching '*' under directory 'bin'
    no previously-included directories found matching 'tests/test_integration'
    warning: no previously-included files found matching 'Makefile'
    warning: no previously-included files found matching '.gitignore'
    warning: no previously-included files found matching '.travis.yml'
    warning: no previously-included files found matching '.readthedocs.yml'
    warning: no previously-included files found matching 'make_release.py'
    warning: no previously-included files found matching 'cgrep'
    warning: no previously-included files found matching 'vgrep'
    no previously-included directories found matching 'notes'
    no previously-included directories found matching 'auxiliary'
    adding license file 'LICENSE'
    writing manifest file 'clevercsv.egg-info/SOURCES.txt'
    * Building sdist...
    running sdist
    running egg_info
    writing clevercsv.egg-info/PKG-INFO
    writing dependency_links to clevercsv.egg-info/dependency_links.txt
    writing entry points to clevercsv.egg-info/entry_points.txt
    writing requirements to clevercsv.egg-info/requires.txt
    writing top-level names to clevercsv.egg-info/top_level.txt
    reading manifest file 'clevercsv.egg-info/SOURCES.txt'
    reading manifest template 'MANIFEST.in'
    warning: no files found matching 'requirements.txt'
    warning: no files found matching '*' under directory 'bin'
    no previously-included directories found matching 'tests/test_integration'
    warning: no previously-included files found matching 'Makefile'
    warning: no previously-included files found matching '.gitignore'
    warning: no previously-included files found matching '.travis.yml'
    warning: no previously-included files found matching '.readthedocs.yml'
    warning: no previously-included files found matching 'make_release.py'
    warning: no previously-included files found matching 'cgrep'
    warning: no previously-included files found matching 'vgrep'
    no previously-included directories found matching 'notes'
    no previously-included directories found matching 'auxiliary'
    adding license file 'LICENSE'
    writing manifest file 'clevercsv.egg-info/SOURCES.txt'
    running check
    creating clevercsv-0.7.4
    creating clevercsv-0.7.4/clevercsv
    creating clevercsv-0.7.4/clevercsv.egg-info
    creating clevercsv-0.7.4/clevercsv/console
    creating clevercsv-0.7.4/clevercsv/console/commands
    creating clevercsv-0.7.4/man
    creating clevercsv-0.7.4/src
    creating clevercsv-0.7.4/tests
    creating clevercsv-0.7.4/tests/test_unit
    copying files to clevercsv-0.7.4...
    copying CHANGELOG.md -> clevercsv-0.7.4
    copying LICENSE -> clevercsv-0.7.4
    copying MANIFEST.in -> clevercsv-0.7.4
    copying README.md -> clevercsv-0.7.4
    copying pyproject.toml -> clevercsv-0.7.4
    copying setup.py -> clevercsv-0.7.4
    copying clevercsv/__init__.py -> clevercsv-0.7.4/clevercsv
    copying clevercsv/__main__.py -> clevercsv-0.7.4/clevercsv
    copying clevercsv/__version__.py -> clevercsv-0.7.4/clevercsv
    copying clevercsv/_optional.py -> clevercsv-0.7.4/clevercsv
    copying clevercsv/break_ties.py -> clevercsv-0.7.4/clevercsv
    copying clevercsv/consistency.py -> clevercsv-0.7.4/clevercsv
    copying clevercsv/cparser_util.py -> clevercsv-0.7.4/clevercsv
    copying clevercsv/detect.py -> clevercsv-0.7.4/clevercsv
    copying clevercsv/detect_pattern.py -> clevercsv-0.7.4/clevercsv
    copying clevercsv/detect_type.py -> clevercsv-0.7.4/clevercsv
    copying clevercsv/dialect.py -> clevercsv-0.7.4/clevercsv
    copying clevercsv/dict_read_write.py -> clevercsv-0.7.4/clevercsv
    copying clevercsv/encoding.py -> clevercsv-0.7.4/clevercsv
    copying clevercsv/escape.py -> clevercsv-0.7.4/clevercsv
    copying clevercsv/exceptions.py -> clevercsv-0.7.4/clevercsv
    copying clevercsv/normal_form.py -> clevercsv-0.7.4/clevercsv
    copying clevercsv/potential_dialects.py -> clevercsv-0.7.4/clevercsv
    copying clevercsv/read.py -> clevercsv-0.7.4/clevercsv
    copying clevercsv/utils.py -> clevercsv-0.7.4/clevercsv
    copying clevercsv/wrappers.py -> clevercsv-0.7.4/clevercsv
    copying clevercsv/write.py -> clevercsv-0.7.4/clevercsv
    copying clevercsv.egg-info/PKG-INFO -> clevercsv-0.7.4/clevercsv.egg-info
    copying clevercsv.egg-info/SOURCES.txt -> clevercsv-0.7.4/clevercsv.egg-info
    copying clevercsv.egg-info/dependency_links.txt -> clevercsv-0.7.4/clevercsv.egg-info
    copying clevercsv.egg-info/entry_points.txt -> clevercsv-0.7.4/clevercsv.egg-info
    copying clevercsv.egg-info/requires.txt -> clevercsv-0.7.4/clevercsv.egg-info
    copying clevercsv.egg-info/top_level.txt -> clevercsv-0.7.4/clevercsv.egg-info
    copying clevercsv/console/__init__.py -> clevercsv-0.7.4/clevercsv/console
    copying clevercsv/console/application.py -> clevercsv-0.7.4/clevercsv/console
    copying clevercsv/console/commands/__init__.py -> clevercsv-0.7.4/clevercsv/console/commands
    copying clevercsv/console/commands/_docs.py -> clevercsv-0.7.4/clevercsv/console/commands
    copying clevercsv/console/commands/_utils.py -> clevercsv-0.7.4/clevercsv/console/commands
    copying clevercsv/console/commands/code.py -> clevercsv-0.7.4/clevercsv/console/commands
    copying clevercsv/console/commands/detect.py -> clevercsv-0.7.4/clevercsv/console/commands
    copying clevercsv/console/commands/explore.py -> clevercsv-0.7.4/clevercsv/console/commands
    copying clevercsv/console/commands/standardize.py -> clevercsv-0.7.4/clevercsv/console/commands
    copying clevercsv/console/commands/view.py -> clevercsv-0.7.4/clevercsv/console/commands
    copying man/clevercsv-code.1 -> clevercsv-0.7.4/man
    copying man/clevercsv-detect.1 -> clevercsv-0.7.4/man
    copying man/clevercsv-explore.1 -> clevercsv-0.7.4/man
    copying man/clevercsv-help.1 -> clevercsv-0.7.4/man
    copying man/clevercsv-standardize.1 -> clevercsv-0.7.4/man
    copying man/clevercsv-view.1 -> clevercsv-0.7.4/man
    copying man/clevercsv.1 -> clevercsv-0.7.4/man
    copying src/abstraction.c -> clevercsv-0.7.4/src
    copying src/cparser.c -> clevercsv-0.7.4/src
    copying tests/test_unit/test_consistency.py -> clevercsv-0.7.4/tests/test_unit
    copying tests/test_unit/test_console.py -> clevercsv-0.7.4/tests/test_unit
    copying tests/test_unit/test_cparser.py -> clevercsv-0.7.4/tests/test_unit
    copying tests/test_unit/test_detect.py -> clevercsv-0.7.4/tests/test_unit
    copying tests/test_unit/test_detect_pattern.py -> clevercsv-0.7.4/tests/test_unit
    copying tests/test_unit/test_detect_type.py -> clevercsv-0.7.4/tests/test_unit
    copying tests/test_unit/test_dict.py -> clevercsv-0.7.4/tests/test_unit
    copying tests/test_unit/test_encoding.py -> clevercsv-0.7.4/tests/test_unit
    copying tests/test_unit/test_fuzzing.py -> clevercsv-0.7.4/tests/test_unit
    copying tests/test_unit/test_normal_forms.py -> clevercsv-0.7.4/tests/test_unit
    copying tests/test_unit/test_potential_dialects.py -> clevercsv-0.7.4/tests/test_unit
    copying tests/test_unit/test_reader.py -> clevercsv-0.7.4/tests/test_unit
    copying tests/test_unit/test_wrappers.py -> clevercsv-0.7.4/tests/test_unit
    copying tests/test_unit/test_write.py -> clevercsv-0.7.4/tests/test_unit
    Writing clevercsv-0.7.4/setup.cfg
    Creating tar archive
    removing 'clevercsv-0.7.4' (and everything under it)
    * Building wheel from sdist
    * Getting build dependencies for wheel...
    running egg_info
    writing clevercsv.egg-info/PKG-INFO
    writing dependency_links to clevercsv.egg-info/dependency_links.txt
    writing entry points to clevercsv.egg-info/entry_points.txt
    writing requirements to clevercsv.egg-info/requires.txt
    writing top-level names to clevercsv.egg-info/top_level.txt
    reading manifest file 'clevercsv.egg-info/SOURCES.txt'
    reading manifest template 'MANIFEST.in'
    warning: no files found matching 'requirements.txt'
    warning: no files found matching '*' under directory 'bin'
    no previously-included directories found matching 'tests/test_integration'
    warning: no previously-included files found matching 'Makefile'
    warning: no previously-included files found matching '.gitignore'
    warning: no previously-included files found matching '.travis.yml'
    warning: no previously-included files found matching '.readthedocs.yml'
    warning: no previously-included files found matching 'make_release.py'
    warning: no previously-included files found matching 'cgrep'
    warning: no previously-included files found matching 'vgrep'
    no previously-included directories found matching 'notes'
    no previously-included directories found matching 'auxiliary'
    adding license file 'LICENSE'
    writing manifest file 'clevercsv.egg-info/SOURCES.txt'
    * Building wheel...
    running bdist_wheel
    running build
    running build_py
    creating build
    creating build/lib.linux-x86_64-cpython-310
    creating build/lib.linux-x86_64-cpython-310/clevercsv
    copying clevercsv/write.py -> build/lib.linux-x86_64-cpython-310/clevercsv
    copying clevercsv/wrappers.py -> build/lib.linux-x86_64-cpython-310/clevercsv
    copying clevercsv/utils.py -> build/lib.linux-x86_64-cpython-310/clevercsv
    copying clevercsv/read.py -> build/lib.linux-x86_64-cpython-310/clevercsv
    copying clevercsv/potential_dialects.py -> build/lib.linux-x86_64-cpython-310/clevercsv
    copying clevercsv/normal_form.py -> build/lib.linux-x86_64-cpython-310/clevercsv
    copying clevercsv/exceptions.py -> build/lib.linux-x86_64-cpython-310/clevercsv
    copying clevercsv/escape.py -> build/lib.linux-x86_64-cpython-310/clevercsv
    copying clevercsv/encoding.py -> build/lib.linux-x86_64-cpython-310/clevercsv
    copying clevercsv/dict_read_write.py -> build/lib.linux-x86_64-cpython-310/clevercsv
    copying clevercsv/dialect.py -> build/lib.linux-x86_64-cpython-310/clevercsv
    copying clevercsv/detect_type.py -> build/lib.linux-x86_64-cpython-310/clevercsv
    copying clevercsv/detect_pattern.py -> build/lib.linux-x86_64-cpython-310/clevercsv
    copying clevercsv/detect.py -> build/lib.linux-x86_64-cpython-310/clevercsv
    copying clevercsv/cparser_util.py -> build/lib.linux-x86_64-cpython-310/clevercsv
    copying clevercsv/consistency.py -> build/lib.linux-x86_64-cpython-310/clevercsv
    copying clevercsv/break_ties.py -> build/lib.linux-x86_64-cpython-310/clevercsv
    copying clevercsv/_optional.py -> build/lib.linux-x86_64-cpython-310/clevercsv
    copying clevercsv/__version__.py -> build/lib.linux-x86_64-cpython-310/clevercsv
    copying clevercsv/__main__.py -> build/lib.linux-x86_64-cpython-310/clevercsv
    copying clevercsv/__init__.py -> build/lib.linux-x86_64-cpython-310/clevercsv
    creating build/lib.linux-x86_64-cpython-310/clevercsv/console
    copying clevercsv/console/application.py -> build/lib.linux-x86_64-cpython-310/clevercsv/console
    copying clevercsv/console/__init__.py -> build/lib.linux-x86_64-cpython-310/clevercsv/console
    creating build/lib.linux-x86_64-cpython-310/clevercsv/console/commands
    copying clevercsv/console/commands/view.py -> build/lib.linux-x86_64-cpython-310/clevercsv/console/commands
    copying clevercsv/console/commands/standardize.py -> build/lib.linux-x86_64-cpython-310/clevercsv/console/commands
    copying clevercsv/console/commands/explore.py -> build/lib.linux-x86_64-cpython-310/clevercsv/console/commands
    copying clevercsv/console/commands/detect.py -> build/lib.linux-x86_64-cpython-310/clevercsv/console/commands
    copying clevercsv/console/commands/code.py -> build/lib.linux-x86_64-cpython-310/clevercsv/console/commands
    copying clevercsv/console/commands/_utils.py -> build/lib.linux-x86_64-cpython-310/clevercsv/console/commands
    copying clevercsv/console/commands/_docs.py -> build/lib.linux-x86_64-cpython-310/clevercsv/console/commands
    copying clevercsv/console/commands/__init__.py -> build/lib.linux-x86_64-cpython-310/clevercsv/console/commands
    running egg_info
    writing clevercsv.egg-info/PKG-INFO
    writing dependency_links to clevercsv.egg-info/dependency_links.txt
    writing entry points to clevercsv.egg-info/entry_points.txt
    writing requirements to clevercsv.egg-info/requires.txt
    writing top-level names to clevercsv.egg-info/top_level.txt
    reading manifest file 'clevercsv.egg-info/SOURCES.txt'
    reading manifest template 'MANIFEST.in'
    warning: no files found matching 'requirements.txt'
    warning: no files found matching '*' under directory 'bin'
    no previously-included directories found matching 'tests/test_integration'
    warning: no previously-included files found matching 'Makefile'
    warning: no previously-included files found matching '.gitignore'
    warning: no previously-included files found matching '.travis.yml'
    warning: no previously-included files found matching '.readthedocs.yml'
    warning: no previously-included files found matching 'make_release.py'
    warning: no previously-included files found matching 'cgrep'
    warning: no previously-included files found matching 'vgrep'
    no previously-included directories found matching 'notes'
    no previously-included directories found matching 'auxiliary'
    adding license file 'LICENSE'
    writing manifest file 'clevercsv.egg-info/SOURCES.txt'
    running build_ext
    building 'clevercsv.cparser' extension
    creating build/temp.linux-x86_64-cpython-310
    creating build/temp.linux-x86_64-cpython-310/src
    gcc -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -I/nix/store/vamwsqfpvgfwnc7ksa8k4aa52my5r1bq-libxcrypt-4.4.33/include -fPIC -I/tmp/clevercsv/venv/include -I/nix/store/al6g1zbk8li6p8mcyp0h60d08jaahf8c-python3-3.10.9/include/python3.10 -c src/cparser.c -o build/temp.linux-x86_64-cpython-310/src/cparser.o
    gcc -shared -L/nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-zlib-1.2.13/lib -L/nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-bzip2-1.0.8/lib -L/nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-expat-2.5.0/lib -L/nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-xz-5.2.9/lib -L/nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-libffi-3.4.4/lib -L/nix/store/vamwsqfpvgfwnc7ksa8k4aa52my5r1bq-libxcrypt-4.4.33/lib -L/nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-gdbm-1.23/lib -L/nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-sqlite-3.40.0/lib -L/nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-readline-8.1p2/lib -L/nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-ncurses-6.3-p20220507/lib -L/nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-openssl-3.0.7/lib -L/nix/store/11mrj0y0k09j7pzcr78iy5fxgcmzjxq6-tzdata-2022g/lib -L/nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-zlib-1.2.13/lib -L/nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-bzip2-1.0.8/lib -L/nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-expat-2.5.0/lib -L/nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-xz-5.2.9/lib -L/nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-libffi-3.4.4/lib -L/nix/store/vamwsqfpvgfwnc7ksa8k4aa52my5r1bq-libxcrypt-4.4.33/lib -L/nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-gdbm-1.23/lib -L/nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-sqlite-3.40.0/lib -L/nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-readline-8.1p2/lib -L/nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-ncurses-6.3-p20220507/lib -L/nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-openssl-3.0.7/lib -L/nix/store/11mrj0y0k09j7pzcr78iy5fxgcmzjxq6-tzdata-2022g/lib build/temp.linux-x86_64-cpython-310/src/cparser.o -L/nix/store/al6g1zbk8li6p8mcyp0h60d08jaahf8c-python3-3.10.9/lib -o build/lib.linux-x86_64-cpython-310/clevercsv/cparser.cpython-310-x86_64-linux-gnu.so
    building 'clevercsv.cabstraction' extension
    gcc -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -I/nix/store/vamwsqfpvgfwnc7ksa8k4aa52my5r1bq-libxcrypt-4.4.33/include -fPIC -I/tmp/clevercsv/venv/include -I/nix/store/al6g1zbk8li6p8mcyp0h60d08jaahf8c-python3-3.10.9/include/python3.10 -c src/abstraction.c -o build/temp.linux-x86_64-cpython-310/src/abstraction.o
    gcc -shared -L/nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-zlib-1.2.13/lib -L/nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-bzip2-1.0.8/lib -L/nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-expat-2.5.0/lib -L/nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-xz-5.2.9/lib -L/nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-libffi-3.4.4/lib -L/nix/store/vamwsqfpvgfwnc7ksa8k4aa52my5r1bq-libxcrypt-4.4.33/lib -L/nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-gdbm-1.23/lib -L/nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-sqlite-3.40.0/lib -L/nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-readline-8.1p2/lib -L/nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-ncurses-6.3-p20220507/lib -L/nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-openssl-3.0.7/lib -L/nix/store/11mrj0y0k09j7pzcr78iy5fxgcmzjxq6-tzdata-2022g/lib -L/nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-zlib-1.2.13/lib -L/nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-bzip2-1.0.8/lib -L/nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-expat-2.5.0/lib -L/nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-xz-5.2.9/lib -L/nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-libffi-3.4.4/lib -L/nix/store/vamwsqfpvgfwnc7ksa8k4aa52my5r1bq-libxcrypt-4.4.33/lib -L/nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-gdbm-1.23/lib -L/nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-sqlite-3.40.0/lib -L/nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-readline-8.1p2/lib -L/nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-ncurses-6.3-p20220507/lib -L/nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-openssl-3.0.7/lib -L/nix/store/11mrj0y0k09j7pzcr78iy5fxgcmzjxq6-tzdata-2022g/lib build/temp.linux-x86_64-cpython-310/src/abstraction.o -L/nix/store/al6g1zbk8li6p8mcyp0h60d08jaahf8c-python3-3.10.9/lib -o build/lib.linux-x86_64-cpython-310/clevercsv/cabstraction.cpython-310-x86_64-linux-gnu.so
    installing to build/bdist.linux-x86_64/wheel
    running install
    running install_lib
    creating build/bdist.linux-x86_64
    creating build/bdist.linux-x86_64/wheel
    creating build/bdist.linux-x86_64/wheel/clevercsv
    copying build/lib.linux-x86_64-cpython-310/clevercsv/cabstraction.cpython-310-x86_64-linux-gnu.so -> build/bdist.linux-x86_64/wheel/clevercsv
    copying build/lib.linux-x86_64-cpython-310/clevercsv/cparser.cpython-310-x86_64-linux-gnu.so -> build/bdist.linux-x86_64/wheel/clevercsv
    creating build/bdist.linux-x86_64/wheel/clevercsv/console
    creating build/bdist.linux-x86_64/wheel/clevercsv/console/commands
    copying build/lib.linux-x86_64-cpython-310/clevercsv/console/commands/__init__.py -> build/bdist.linux-x86_64/wheel/clevercsv/console/commands
    copying build/lib.linux-x86_64-cpython-310/clevercsv/console/commands/_docs.py -> build/bdist.linux-x86_64/wheel/clevercsv/console/commands
    copying build/lib.linux-x86_64-cpython-310/clevercsv/console/commands/_utils.py -> build/bdist.linux-x86_64/wheel/clevercsv/console/commands
    copying build/lib.linux-x86_64-cpython-310/clevercsv/console/commands/code.py -> build/bdist.linux-x86_64/wheel/clevercsv/console/commands
    copying build/lib.linux-x86_64-cpython-310/clevercsv/console/commands/detect.py -> build/bdist.linux-x86_64/wheel/clevercsv/console/commands
    copying build/lib.linux-x86_64-cpython-310/clevercsv/console/commands/explore.py -> build/bdist.linux-x86_64/wheel/clevercsv/console/commands
    copying build/lib.linux-x86_64-cpython-310/clevercsv/console/commands/standardize.py -> build/bdist.linux-x86_64/wheel/clevercsv/console/commands
    copying build/lib.linux-x86_64-cpython-310/clevercsv/console/commands/view.py -> build/bdist.linux-x86_64/wheel/clevercsv/console/commands
    copying build/lib.linux-x86_64-cpython-310/clevercsv/console/__init__.py -> build/bdist.linux-x86_64/wheel/clevercsv/console
    copying build/lib.linux-x86_64-cpython-310/clevercsv/console/application.py -> build/bdist.linux-x86_64/wheel/clevercsv/console
    copying build/lib.linux-x86_64-cpython-310/clevercsv/__init__.py -> build/bdist.linux-x86_64/wheel/clevercsv
    copying build/lib.linux-x86_64-cpython-310/clevercsv/__main__.py -> build/bdist.linux-x86_64/wheel/clevercsv
    copying build/lib.linux-x86_64-cpython-310/clevercsv/__version__.py -> build/bdist.linux-x86_64/wheel/clevercsv
    copying build/lib.linux-x86_64-cpython-310/clevercsv/_optional.py -> build/bdist.linux-x86_64/wheel/clevercsv
    copying build/lib.linux-x86_64-cpython-310/clevercsv/break_ties.py -> build/bdist.linux-x86_64/wheel/clevercsv
    copying build/lib.linux-x86_64-cpython-310/clevercsv/consistency.py -> build/bdist.linux-x86_64/wheel/clevercsv
    copying build/lib.linux-x86_64-cpython-310/clevercsv/cparser_util.py -> build/bdist.linux-x86_64/wheel/clevercsv
    copying build/lib.linux-x86_64-cpython-310/clevercsv/detect.py -> build/bdist.linux-x86_64/wheel/clevercsv
    copying build/lib.linux-x86_64-cpython-310/clevercsv/detect_pattern.py -> build/bdist.linux-x86_64/wheel/clevercsv
    copying build/lib.linux-x86_64-cpython-310/clevercsv/detect_type.py -> build/bdist.linux-x86_64/wheel/clevercsv
    copying build/lib.linux-x86_64-cpython-310/clevercsv/dialect.py -> build/bdist.linux-x86_64/wheel/clevercsv
    copying build/lib.linux-x86_64-cpython-310/clevercsv/dict_read_write.py -> build/bdist.linux-x86_64/wheel/clevercsv
    copying build/lib.linux-x86_64-cpython-310/clevercsv/encoding.py -> build/bdist.linux-x86_64/wheel/clevercsv
    copying build/lib.linux-x86_64-cpython-310/clevercsv/escape.py -> build/bdist.linux-x86_64/wheel/clevercsv
    copying build/lib.linux-x86_64-cpython-310/clevercsv/exceptions.py -> build/bdist.linux-x86_64/wheel/clevercsv
    copying build/lib.linux-x86_64-cpython-310/clevercsv/normal_form.py -> build/bdist.linux-x86_64/wheel/clevercsv
    copying build/lib.linux-x86_64-cpython-310/clevercsv/potential_dialects.py -> build/bdist.linux-x86_64/wheel/clevercsv
    copying build/lib.linux-x86_64-cpython-310/clevercsv/read.py -> build/bdist.linux-x86_64/wheel/clevercsv
    copying build/lib.linux-x86_64-cpython-310/clevercsv/utils.py -> build/bdist.linux-x86_64/wheel/clevercsv
    copying build/lib.linux-x86_64-cpython-310/clevercsv/wrappers.py -> build/bdist.linux-x86_64/wheel/clevercsv
    copying build/lib.linux-x86_64-cpython-310/clevercsv/write.py -> build/bdist.linux-x86_64/wheel/clevercsv
    running install_data
    creating build/bdist.linux-x86_64/wheel/clevercsv-0.7.4.data
    creating build/bdist.linux-x86_64/wheel/clevercsv-0.7.4.data/data
    creating build/bdist.linux-x86_64/wheel/clevercsv-0.7.4.data/data/man
    creating build/bdist.linux-x86_64/wheel/clevercsv-0.7.4.data/data/man/man1
    copying man/clevercsv.1 -> build/bdist.linux-x86_64/wheel/clevercsv-0.7.4.data/data/man/man1
    copying man/clevercsv-view.1 -> build/bdist.linux-x86_64/wheel/clevercsv-0.7.4.data/data/man/man1
    copying man/clevercsv-standardize.1 -> build/bdist.linux-x86_64/wheel/clevercsv-0.7.4.data/data/man/man1
    copying man/clevercsv-help.1 -> build/bdist.linux-x86_64/wheel/clevercsv-0.7.4.data/data/man/man1
    copying man/clevercsv-explore.1 -> build/bdist.linux-x86_64/wheel/clevercsv-0.7.4.data/data/man/man1
    copying man/clevercsv-detect.1 -> build/bdist.linux-x86_64/wheel/clevercsv-0.7.4.data/data/man/man1
    copying man/clevercsv-code.1 -> build/bdist.linux-x86_64/wheel/clevercsv-0.7.4.data/data/man/man1
    running install_egg_info
    Copying clevercsv.egg-info to build/bdist.linux-x86_64/wheel/clevercsv-0.7.4-py3.10.egg-info
    running install_scripts
    creating build/bdist.linux-x86_64/wheel/clevercsv-0.7.4.dist-info/WHEEL
    creating '/tmp/clevercsv/dist/tmpa29i1ebc/clevercsv-0.7.4-cp310-cp310-linux_x86_64.whl' and adding 'build/bdist.linux-x86_64/wheel' to it
    adding 'clevercsv/__init__.py'
    adding 'clevercsv/__main__.py'
    adding 'clevercsv/__version__.py'
    adding 'clevercsv/_optional.py'
    adding 'clevercsv/break_ties.py'
    adding 'clevercsv/cabstraction.cpython-310-x86_64-linux-gnu.so'
    adding 'clevercsv/consistency.py'
    adding 'clevercsv/cparser.cpython-310-x86_64-linux-gnu.so'
    adding 'clevercsv/cparser_util.py'
    adding 'clevercsv/detect.py'
    adding 'clevercsv/detect_pattern.py'
    adding 'clevercsv/detect_type.py'
    adding 'clevercsv/dialect.py'
    adding 'clevercsv/dict_read_write.py'
    adding 'clevercsv/encoding.py'
    adding 'clevercsv/escape.py'
    adding 'clevercsv/exceptions.py'
    adding 'clevercsv/normal_form.py'
    adding 'clevercsv/potential_dialects.py'
    adding 'clevercsv/read.py'
    adding 'clevercsv/utils.py'
    adding 'clevercsv/wrappers.py'
    adding 'clevercsv/write.py'
    adding 'clevercsv/console/__init__.py'
    adding 'clevercsv/console/application.py'
    adding 'clevercsv/console/commands/__init__.py'
    adding 'clevercsv/console/commands/_docs.py'
    adding 'clevercsv/console/commands/_utils.py'
    adding 'clevercsv/console/commands/code.py'
    adding 'clevercsv/console/commands/detect.py'
    adding 'clevercsv/console/commands/explore.py'
    adding 'clevercsv/console/commands/standardize.py'
    adding 'clevercsv/console/commands/view.py'
    adding 'clevercsv-0.7.4.data/data/man/man1/clevercsv-code.1'
    adding 'clevercsv-0.7.4.data/data/man/man1/clevercsv-detect.1'
    adding 'clevercsv-0.7.4.data/data/man/man1/clevercsv-explore.1'
    adding 'clevercsv-0.7.4.data/data/man/man1/clevercsv-help.1'
    adding 'clevercsv-0.7.4.data/data/man/man1/clevercsv-standardize.1'
    adding 'clevercsv-0.7.4.data/data/man/man1/clevercsv-view.1'
    adding 'clevercsv-0.7.4.data/data/man/man1/clevercsv.1'
    adding 'clevercsv-0.7.4.dist-info/LICENSE'
    adding 'clevercsv-0.7.4.dist-info/METADATA'
    adding 'clevercsv-0.7.4.dist-info/WHEEL'
    adding 'clevercsv-0.7.4.dist-info/entry_points.txt'
    adding 'clevercsv-0.7.4.dist-info/top_level.txt'
    adding 'clevercsv-0.7.4.dist-info/RECORD'
    removing build/bdist.linux-x86_64/wheel
    Successfully built clevercsv-0.7.4.tar.gz and clevercsv-0.7.4-cp310-cp310-linux_x86_64.whl
    
    invalid 
    opened by mweinelt 3
  • Remove msvc hack for Numpy < 1.11.2

    Remove msvc hack for Numpy < 1.11.2

    Summary of changes

    Remove the msvc hack that was applied if numpy.distutils were loaded prior to Numpy 1.11.2. These versions date back to June 2016 and no longer build with Python 3.7. At the same time, the hack relies on packaging.version.LegacyVersion that is removed in packaging 22.0.

    Pull Request Checklist

    opened by mgorny 3
  • Apply workaround on all versions of Python. Fixes #3452.

    Apply workaround on all versions of Python. Fixes #3452.

    Summary of changes

    Closes

    Pull Request Checklist

    opened by mathieubathalon 0
Releases(v65.6.3)
Building JUCE projects using CMake made easy

FRUT makes it easy to build JUCE projects using CMake instead of Projucer. It enables more flexibility in project architecture, simplified CI setup, a

Alain Martin 341 Jan 08, 2023
Buildout is a deployment automation tool written in and extended with Python

Buildout Buildout is a project designed to solve 2 problems: Application-centric assembly and deployment Assembly runs the gamut from stitching togeth

buildout 552 Nov 26, 2022
This is a python helper package for Telebirr H5 Web payment integration helper.

Project Glow Greetings, I see you have stumbled upon project glow. Project glow is an open source bot worked on by many people to create a good and sa

24 Dec 13, 2022
Pythonic task management & command execution.

Welcome to Invoke! Invoke is a Python (2.7 and 3.4+) library for managing shell-oriented subprocesses and organizing executable Python code into CLI-i

3.8k Jan 06, 2023
Official project repository for the Setuptools build system

See the Installation Instructions in the Python Packaging User's Guide for instructions on installing, upgrading, and uninstalling Setuptools. Questio

Python Packaging Authority 1.9k Jan 08, 2023
Python-based project scripting.

Paver - Easy Scripting for Software Projects Web: https://pythonhosted.org/Paver/ Download: https://pypi.python.org/pypi/Paver/ Source: https://github

Paver community 452 Dec 09, 2022
The Pants Build System

Pants Build System Pants is a scalable build system for monorepos: codebases containing multiple projects, often using multiple programming languages

Pants Build 2.5k Jan 07, 2023
This is a simple tool for bootstrapping Chimera systems from binaries. For source builds, you want cports.

chimera-bootstrap This is a simple tool for bootstrapping Chimera systems from binaries. For source builds, you want cports. Simple usage: $ # run as

Chimera Linux 7 Feb 11, 2022
Python package used on Hardfight projects to make building, testing and deploying easy.

Hardfight Devtools Build, test and deploy Hardfight projects easly 💡 What is it Devtools is a Python tool to make building, testing and deploying int

Hardfight 1 Dec 05, 2021
A pynt of Python build.

A pynt of Python build. Raghunandan Rao Features Easy to learn. Build tasks are just python funtions. Manages dependencies between tasks. Automaticall

Raghunandan Rao 154 Jan 04, 2023
PyPacker: a dumb little script for turning Python apps into standalone executable packages on Windows

PyPacker: a dumb little script for turning Python apps into standalone executable packages on Windows PyPacker is my attempt at creating a way to make

Serdar Yegulalp 9 Mar 15, 2022
bitbake tool

Bitbake ======= BitBake is a generic task execution engine that allows shell and Python tasks to be run efficiently and in parallel while working wit

openembedded 336 Dec 27, 2022
Simplified packaging of Python modules

Flit is a simple way to put Python packages and modules on PyPI. It tries to require less thought about packaging and help you avoid common mistakes.

Thomas Kluyver 1.9k Jan 05, 2023
Clang-based cross platform build system written in Python

Clang-build Find the full documentation at https://clang-build.readthedocs.io First steps Customisations Multiple targets Multiple projects Defaults M

Trick 17 9 Jun 29, 2022
PlatformIO is a professional collaborative platform for embedded development :alien: A place where Developers and Teams have true Freedom! No more vendor lock-in!

PlatformIO Quick Links: Web | PlatformIO IDE | Project Examples | Docs | Donate | Contact Us Social: LinkedIn | Twitter | Facebook | Community Forums

PlatformIO 6.5k Jan 08, 2023
Software build automation tool for Python.

PyBuilder — an easy-to-use build automation tool for Python PyBuilder is a software build tool written in 100% pure Python, mainly targeting Python ap

PyBuilder 1.5k Jan 04, 2023
Python program for installing many tools automatically

Tool Installer is a script made with python which help user in installing tools automatically

Spider Anongreyhat 6 Mar 13, 2022
Dev is a Makefile replacement for modern development environments

Dev Dev is a Makefile replacement for modern development environments. Dev let's

Mason Data 9 Dec 09, 2022
Ninja is a small build system with a focus on speed.

Ninja Ninja is a small build system with a focus on speed. https://ninja-build.org/ See the manual or doc/manual.asciidoc included in the distribution

8.9k Dec 30, 2022
SCons - a software construction tool

SCons - a software construction tool Welcome to the SCons development tree. The real purpose of this tree is to package SCons for production distribut

SCons Project 1.6k Jan 03, 2023