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)?
python setup.py cpython pypy
add a comment |
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)?
python setup.py cpython pypy
add a comment |
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)?
python setup.py cpython pypy
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
python setup.py cpython pypy
edited Nov 7 at 13:30
asked Nov 7 at 13:04
Azat Ibrakov
3,65861330
3,65861330
add a comment |
add a comment |
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
add a comment |
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
add a comment |
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
add a comment |
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
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
edited Nov 7 at 13:56
Azat Ibrakov
3,65861330
3,65861330
answered Nov 7 at 13:53
Serge Ballesta
74.5k956128
74.5k956128
add a comment |
add a comment |
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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