Specifying additional dependencies in setup.py script based on Python implementation











up vote
1
down vote

favorite












Preface



I have a package with PyPy support and for CPython users it has mypy as an additional dependency which I specify as



import platform

from setuptools import setup
...
install_requires = [...]
if platform.python_implementation() != 'PyPy':
install_requires.append('mypy>=0.630')
setup(...,
install_requires=install_requires)


and locally it works fine, but when I create source distribution via CPython like



> python setup.py sdist


and try to install it via PyPy



> pypy3 -m pip install path/to/package.tar.gz


it tries to install mypy (and fails since mypy uses CPython-specific packages), so it looks like dependencies are taken for CPython version (for which distribution was created).



Problem



How can I specify dependencies and create source distribution once so it will work for both CPython & PyPy versions (and upload to PyPI afterwards)?










share|improve this question




























    up vote
    1
    down vote

    favorite












    Preface



    I have a package with PyPy support and for CPython users it has mypy as an additional dependency which I specify as



    import platform

    from setuptools import setup
    ...
    install_requires = [...]
    if platform.python_implementation() != 'PyPy':
    install_requires.append('mypy>=0.630')
    setup(...,
    install_requires=install_requires)


    and locally it works fine, but when I create source distribution via CPython like



    > python setup.py sdist


    and try to install it via PyPy



    > pypy3 -m pip install path/to/package.tar.gz


    it tries to install mypy (and fails since mypy uses CPython-specific packages), so it looks like dependencies are taken for CPython version (for which distribution was created).



    Problem



    How can I specify dependencies and create source distribution once so it will work for both CPython & PyPy versions (and upload to PyPI afterwards)?










    share|improve this question


























      up vote
      1
      down vote

      favorite









      up vote
      1
      down vote

      favorite











      Preface



      I have a package with PyPy support and for CPython users it has mypy as an additional dependency which I specify as



      import platform

      from setuptools import setup
      ...
      install_requires = [...]
      if platform.python_implementation() != 'PyPy':
      install_requires.append('mypy>=0.630')
      setup(...,
      install_requires=install_requires)


      and locally it works fine, but when I create source distribution via CPython like



      > python setup.py sdist


      and try to install it via PyPy



      > pypy3 -m pip install path/to/package.tar.gz


      it tries to install mypy (and fails since mypy uses CPython-specific packages), so it looks like dependencies are taken for CPython version (for which distribution was created).



      Problem



      How can I specify dependencies and create source distribution once so it will work for both CPython & PyPy versions (and upload to PyPI afterwards)?










      share|improve this question















      Preface



      I have a package with PyPy support and for CPython users it has mypy as an additional dependency which I specify as



      import platform

      from setuptools import setup
      ...
      install_requires = [...]
      if platform.python_implementation() != 'PyPy':
      install_requires.append('mypy>=0.630')
      setup(...,
      install_requires=install_requires)


      and locally it works fine, but when I create source distribution via CPython like



      > python setup.py sdist


      and try to install it via PyPy



      > pypy3 -m pip install path/to/package.tar.gz


      it tries to install mypy (and fails since mypy uses CPython-specific packages), so it looks like dependencies are taken for CPython version (for which distribution was created).



      Problem



      How can I specify dependencies and create source distribution once so it will work for both CPython & PyPy versions (and upload to PyPI afterwards)?







      python setup.py cpython pypy






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Nov 7 at 13:30

























      asked Nov 7 at 13:04









      Azat Ibrakov

      3,65861330




      3,65861330
























          1 Answer
          1






          active

          oldest

          votes

















          up vote
          1
          down vote



          accepted










          Your current script tests the platform at build time, and not at install time.



          What you need to use is not the platform module, but environment markers defined in PEP 508:



          from setuptools import setup
          ...
          install_requires = [...,
          'mypy>=0.630; implementation_name != "PyPy"']
          setup(...,
          install_requires=install_requires)




          References:




          • install_requires based on python version

          • Building and Distributing Packages with Setuptools — setuptools 40.5.0 documentation






          share|improve this answer























            Your Answer






            StackExchange.ifUsing("editor", function () {
            StackExchange.using("externalEditor", function () {
            StackExchange.using("snippets", function () {
            StackExchange.snippets.init();
            });
            });
            }, "code-snippets");

            StackExchange.ready(function() {
            var channelOptions = {
            tags: "".split(" "),
            id: "1"
            };
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function() {
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled) {
            StackExchange.using("snippets", function() {
            createEditor();
            });
            }
            else {
            createEditor();
            }
            });

            function createEditor() {
            StackExchange.prepareEditor({
            heartbeatType: 'answer',
            convertImagesToLinks: true,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: 10,
            bindNavPrevention: true,
            postfix: "",
            imageUploader: {
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            },
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            });


            }
            });














             

            draft saved


            draft discarded


















            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53190036%2fspecifying-additional-dependencies-in-setup-py-script-based-on-python-implementa%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes








            up vote
            1
            down vote



            accepted










            Your current script tests the platform at build time, and not at install time.



            What you need to use is not the platform module, but environment markers defined in PEP 508:



            from setuptools import setup
            ...
            install_requires = [...,
            'mypy>=0.630; implementation_name != "PyPy"']
            setup(...,
            install_requires=install_requires)




            References:




            • install_requires based on python version

            • Building and Distributing Packages with Setuptools — setuptools 40.5.0 documentation






            share|improve this answer



























              up vote
              1
              down vote



              accepted










              Your current script tests the platform at build time, and not at install time.



              What you need to use is not the platform module, but environment markers defined in PEP 508:



              from setuptools import setup
              ...
              install_requires = [...,
              'mypy>=0.630; implementation_name != "PyPy"']
              setup(...,
              install_requires=install_requires)




              References:




              • install_requires based on python version

              • Building and Distributing Packages with Setuptools — setuptools 40.5.0 documentation






              share|improve this answer

























                up vote
                1
                down vote



                accepted







                up vote
                1
                down vote



                accepted






                Your current script tests the platform at build time, and not at install time.



                What you need to use is not the platform module, but environment markers defined in PEP 508:



                from setuptools import setup
                ...
                install_requires = [...,
                'mypy>=0.630; implementation_name != "PyPy"']
                setup(...,
                install_requires=install_requires)




                References:




                • install_requires based on python version

                • Building and Distributing Packages with Setuptools — setuptools 40.5.0 documentation






                share|improve this answer














                Your current script tests the platform at build time, and not at install time.



                What you need to use is not the platform module, but environment markers defined in PEP 508:



                from setuptools import setup
                ...
                install_requires = [...,
                'mypy>=0.630; implementation_name != "PyPy"']
                setup(...,
                install_requires=install_requires)




                References:




                • install_requires based on python version

                • Building and Distributing Packages with Setuptools — setuptools 40.5.0 documentation







                share|improve this answer














                share|improve this answer



                share|improve this answer








                edited Nov 7 at 13:56









                Azat Ibrakov

                3,65861330




                3,65861330










                answered Nov 7 at 13:53









                Serge Ballesta

                74.5k956128




                74.5k956128






























                     

                    draft saved


                    draft discarded



















































                     


                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function () {
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53190036%2fspecifying-additional-dependencies-in-setup-py-script-based-on-python-implementa%23new-answer', 'question_page');
                    }
                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    這個網誌中的熱門文章

                    Xamarin.form Move up view when keyboard appear

                    Post-Redirect-Get with Spring WebFlux and Thymeleaf

                    Anylogic : not able to use stopDelay()