diff --git a/CHANGELOG.md b/CHANGELOG.md index b0d13a3d09a43f6bc52afdd3cba35f3684f8193d..4534a620b79ab99bda7e728cd04c7272bf7c8797 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # v1.3.2 -* _TBA_ +* added `read_requirements_txt` # v1.3.1 diff --git a/README.md b/README.md index 929e861bb6699fc89b97148f7839831b7844d189..32258f398feda1e5f76e81af094b36d6d53e1af8 100644 --- a/README.md +++ b/README.md @@ -73,3 +73,23 @@ logger = logging.getLogger(__name__) Otherwise `PyInit` won't be generated by Cython and such module will be unimportable in Python. Normal import won't suffice. + +Further streamlining your builds +-------------------------------- + +If you add a MANIFEST.in file with contents: + +``` +include requirements.txt +``` + +Then you can write the following in your setup.py: + +```python +from snakehouse import read_requirements_txt + +setup(install_requires=read_requirements_txt()) +``` + +This will read in your requirements.txt and extract packages from there. +Be sure to entertain it's [pydoc](snakehouse/requirements.py)! diff --git a/requirements.txt b/requirements.txt index e17969fc1d0d7dba749c634fa8d053959d507fe1..efe15f8c4a55b5764d3d986efab0ae2192187e5e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,3 @@ Cython mako -satella +satella>=2.14.46 diff --git a/setup.py b/setup.py index 5a0916f430760df724a5db46ee4d33b1967b2c16..b428c83cab78a2d19e02de3f47c3bc19cdcdc61a 100644 --- a/setup.py +++ b/setup.py @@ -6,7 +6,7 @@ setup(keywords=['cython', 'extension', 'multiple', 'pyx'], packages=find_packages(include=['snakehouse']), version=__version__, install_requires=[ - 'Cython', 'mako', 'satella', + 'Cython', 'mako', 'satella>=2.14.46', ], python_requires='!=2.7.*,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*', package_data={ diff --git a/snakehouse/__init__.py b/snakehouse/__init__.py index 95881362e46f3fc6d56faa24ccb50328825b8710..f11983c3ee467f8c07b4a68a08aca050e07ebdbc 100644 --- a/snakehouse/__init__.py +++ b/snakehouse/__init__.py @@ -1,5 +1,6 @@ from .build import build from .multibuild import Multibuild from .faster_builds import monkey_patch_parallel_compilation +from .requirements import read_requirements_txt -__version__ = '1.3.2a1' +__version__ = '1.3.2' diff --git a/snakehouse/requirements.py b/snakehouse/requirements.py new file mode 100644 index 0000000000000000000000000000000000000000..e7bedce03ef354494200e9e7d784b7cbd2fc63bd --- /dev/null +++ b/snakehouse/requirements.py @@ -0,0 +1,23 @@ +from satella.files import read_lines + + +def read_requirements_txt(path: str = 'requirements.txt'): + """ + Read requirements.txt and parse it into a list of packages + as given by setup(install_required=). + + This means it will read in all lines, discard empty and commented ones, + and discard all those who are an URL. + + Remember to include your requirements.txt inside your MANIFEST.in! + + :param path: path to requirements.txt. Default is `requirements.txt`. + :return: list of packages ready to be fed to setup(install_requires=) + """ + lines = read_lines(path) + lines = (line.strip() for line in lines) + lines = (line for line in lines if not line.startswith('#')) + lines = (line for line in lines if not line.startswith('git+')) + lines = (line for line in lines if not line.startswith('http')) + lines = (line for line in lines if line) + return list(lines)