-
Notifications
You must be signed in to change notification settings - Fork 3
/
create_setup.py
37 lines (30 loc) · 1.38 KB
/
create_setup.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#!/usr/bin/env python
#
# @Author: José Sánchez-Gallego ([email protected])
# @Date: 2019-12-18
# @Filename: create_setup.py
# @License: BSD 3-clause (http://www.opensource.org/licenses/BSD-3-Clause)
# This is a temporary solution for the fact that pip install . fails with
# poetry when there is no setup.py and an extension needs to be compiled.
# See https://github.com/python-poetry/poetry/issues/1516. Running this
# script creates a setup.py filled out with information generated by
# poetry when parsing the pyproject.toml.
import os
import sys
# If there is a global installation of poetry, prefer that.
poetry_python_lib = os.path.expanduser("~/.poetry/lib")
sys.path.append(os.path.realpath(poetry_python_lib))
try:
from poetry.core.factory import Factory
from poetry.core.masonry.builders.sdist import SdistBuilder
except ImportError as ee:
raise ImportError("install poetry by doing pip install poetry to use " f"this script: {ee}") from ee
# Generate a Poetry object that knows about the metadata in pyproject.toml
factory = Factory()
poetry = factory.create_poetry(os.path.dirname(__file__))
# Use the SdistBuilder to genrate a blob for setup.py
sdist_builder = SdistBuilder(poetry, None, None)
setuppy_blob = sdist_builder.build_setup()
with open("setup.py", "wb") as unit:
unit.write(setuppy_blob)
unit.write(b"\n# This setup.py was autogenerated using poetry.\n")