-
-
Notifications
You must be signed in to change notification settings - Fork 18.5k
BUILD: Simplifying contributor dependencies #23522
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 3 commits
1de2402
826482f
35712e8
90c902f
84601da
1e716ef
76adc87
c8658e1
f13ec9c
6f30a04
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
This file was deleted.
This file was deleted.
This file was deleted.
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
name: pandas-dev | ||
channels: | ||
- defaults | ||
- conda-forge | ||
dependencies: | ||
# required | ||
- NumPy | ||
- python=3 | ||
- python-dateutil>=2.5.0 | ||
- pytz | ||
|
||
# development | ||
- Cython>=0.28.2 | ||
- flake8 | ||
- flake8-comprehensions | ||
- hypothesis>=3.58.0 | ||
- isort | ||
- moto | ||
- pytest>=3.6 | ||
- setuptools>=24.2.0 | ||
- sphinx | ||
- sphinxcontrib-spelling | ||
|
||
# optional | ||
- beautifulsoup4>=4.2.1 | ||
- blosc | ||
- bottleneck>=1.2.0 | ||
- fastparquet>=0.1.2 | ||
- gcsfs | ||
- html5lib | ||
- ipython>=5.6.0 | ||
- ipykernel | ||
- jinja2 | ||
- lxml | ||
- matplotlib>=2.0.0 | ||
- nbsphinx | ||
- numexpr>=2.6.1 | ||
- openpyxl | ||
- pyarrow>=0.7.0 | ||
- pymysql | ||
- pytables>=3.4.2 | ||
- pytest-cov | ||
- pytest-xdist | ||
- s3fs | ||
- scipy>=0.18.1 | ||
- seaborn | ||
- sqlalchemy | ||
- statsmodels | ||
- xarray | ||
- xlrd | ||
- xlsxwriter | ||
- xlwt |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,96 @@ | ||
#!/usr/bin/env python | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. maybe change this name to
|
||
""" | ||
Convert the conda environment.yml to the pip requirements.txt, | ||
or check that they have the same packages (for the CI) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. is this script called anywhere right now? should add docs on how to do this in contributing.rst? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @datapythonista if you want to add to contributing.rst at some point would be good (IOW how to run the script), but not necessary for now |
||
|
||
Usage: | ||
|
||
Generate `requirements.txt` | ||
$ ./conda_to_pip | ||
|
||
Compare and fail (exit status != 0) if `requirements.txt` has not been | ||
jreback marked this conversation as resolved.
Show resolved
Hide resolved
|
||
generated with this script: | ||
$ ./conda_to_pip --compare | ||
""" | ||
import argparse | ||
import os | ||
import re | ||
import sys | ||
import yaml | ||
|
||
|
||
EXCLUDE = {'python=3'} | ||
RENAME = {'pytables': 'tables'} | ||
|
||
|
||
def conda_package_to_pip(package): | ||
""" | ||
Convert a conda package to its pip equivalent. | ||
|
||
In most cases they are the same, those are the exceptions: | ||
- Packages that should be excluded (in `EXCLUDE`) | ||
- Packages that should be renamed (in `RENAME`) | ||
- A package requiring a specific version, in conda is defined with a single | ||
equal (e.g. ``pandas=1.0``) and in pip with two (e.g. ``pandas==1.0``) | ||
""" | ||
if package in EXCLUDE: | ||
return | ||
|
||
if package in RENAME: | ||
return RENAME[package] | ||
|
||
return re.sub('(?<=[^<>])=', '==', package).strip() | ||
|
||
|
||
def main(conda_fname, pip_fname, compare=False): | ||
""" | ||
Generate the pip dependencies file from the conda file, or compare that | ||
they are synchronized (``compare=True``). | ||
|
||
Parameters | ||
---------- | ||
conda_fname : str | ||
Path to the conda file with dependencies (e.g. `environment.yml`). | ||
pip_fname : str | ||
Path to the pip file with dependencies (e.g. `requirements.txt`). | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. change the default here |
||
compare : bool, default False | ||
Whether to generate the pip file (``False``) or to compare if the | ||
pip file has been generated with this script and the last version | ||
of the conda file (``True``). | ||
|
||
Returns | ||
------- | ||
bool | ||
True if the comparison fails, False otherwise | ||
""" | ||
with open(conda_fname) as conda_fd: | ||
deps = yaml.safe_load(conda_fd)['dependencies'] | ||
|
||
pip_content = '\n'.join(filter(None, map(conda_package_to_pip, deps))) | ||
|
||
if compare: | ||
with open(pip_fname) as pip_fd: | ||
return pip_content != pip_fd.read() | ||
else: | ||
with open(pip_fname, 'w') as pip_fd: | ||
pip_fd.write(pip_content) | ||
return False | ||
|
||
|
||
if __name__ == '__main__': | ||
argparser = argparse.ArgumentParser( | ||
description='convert (or compare) conda file to pip') | ||
argparser.add_argument('--compare', | ||
action='store_true', | ||
help='compare whether the two files are equivalent') | ||
args = argparser.parse_args() | ||
|
||
repo_path = os.path.dirname(os.path.abspath(os.path.dirname(__file__))) | ||
res = main(os.path.join(repo_path, 'environment.yml'), | ||
os.path.join(repo_path, 'requirements.txt'), | ||
compare=args.compare) | ||
if res: | ||
sys.stderr.write('`requirements.txt` has to be generated with `{}` ' | ||
'after `environment.yml` is modified.\n'.format( | ||
sys.argv[0])) | ||
sys.exit(res) |
This file was deleted.
Uh oh!
There was an error while loading. Please reload this page.