osdir.com

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Flask-AppBuilder has pinned versions of Click & Flask-Login in 1.10.0


Oh I meant FAB 1.11.1.

And it looks like the Jinja issue is a bug in pip-tools, where it treats a dep of "jina" as actually being "jinja>=CURRENT"  https://github.com/pypa/pipenv/issues/2596 <https://github.com/pypa/pipenv/issues/2596>

In short: pip-env isn't ready for real-world use yet? (I'm guessing and extrapolating, but I haven't used it myself so don't trust my word on this)

-ash
> On 4 Oct 2018, at 16:38, Kyle Hamlin <hamlin.kn@xxxxxxxxx> wrote:
> 
> If I remove the Flask-AppBuild pinning to 1.11.0 then it uncovers a Jinja2
> conflict which is baffling because I don't see anywhere in the graph that
> jinja2 >=2.10 is required.
> 
> Could not find a version that matches
> jinja2<2.9.0,>=2.10,>=2.4,>=2.5,>=2.7.3,>=2.8
> Tried: 2.0, 2.1, 2.1.1, 2.2, 2.2.1, 2.3, 2.3.1, 2.4, 2.4.1, 2.5, 2.5.1,
> 2.5.2, 2.5.3, 2.5.4, 2.5.5, 2.6, 2.7, 2.7.1, 2.7.2, 2.7.3, 2.8, 2.8, 2.8.1,
> 2.8.1, 2.9, 2.9, 2.9.1, 2.9.1, 2.9.2, 2.9.2, 2.9.3, 2.9.3, 2.9.4, 2.9.4,
> 2.9.5, 2.9.5, 2.9.6, 2.9.6, 2.10, 2.10
> 
> I highlighted why the dep fails there one dep that requires Jinjs2 < 2.9.0
> but I still have not idea where the 2.10.0 comes from.
> 
> apache-airflow==2.0.0.dev0+incubating
>  - alembic [required: >=0.9,<1.0, installed: 0.9.10]
>    - Mako [required: Any, installed: 1.0.7]
>      - MarkupSafe [required: >=0.9.2, installed: 1.0]
>    - python-dateutil [required: Any, installed: 2.7.3]
>      - six [required: >=1.5, installed: 1.11.0]
>    - python-editor [required: >=0.3, installed: 1.0.3]
>    - SQLAlchemy [required: >=0.7.6, installed: 1.1.18]
>  - bleach [required: ~=2.1.3, installed: 2.1.4]
>    - html5lib [required:
>> =0.99999999pre,!=1.0b8,!=1.0b7,!=1.0b6,!=1.0b5,!=1.0b4,!=1.0b3,!=1.0b2,!=1.0b1,
> installed: 1.0.1]
>      - six [required: >=1.9, installed: 1.11.0]
>      - webencodings [required: Any, installed: 0.5.1]
>    - six [required: Any, installed: 1.11.0]
>  - configparser [required: >=3.5.0,<3.6.0, installed: 3.5.0]
>  - croniter [required: >=0.3.17,<0.4, installed: 0.3.25]
>    - python-dateutil [required: Any, installed: 2.7.3]
>      - six [required: >=1.5, installed: 1.11.0]
>  - dill [required: >=0.2.2,<0.3, installed: 0.2.8.2]
>  - flask [required: >=0.12.4,<0.13, installed: 0.12.4]
>    - click [required: >=2.0, installed: 7.0]
>    - itsdangerous [required: >=0.21, installed: 0.24]
>    - Jinja2 [required: >=2.4, installed: 2.8.1]
>      - MarkupSafe [required: Any, installed: 1.0]
>    - Werkzeug [required: >=0.7, installed: 0.14.1]
>  - flask-admin [required: ==1.4.1, installed: 1.4.1]
>    - Flask [required: >=0.7, installed: 0.12.4]
>      - click [required: >=2.0, installed: 7.0]
>      - itsdangerous [required: >=0.21, installed: 0.24]
>      - Jinja2 [required: >=2.4, installed: 2.8.1]
>        - MarkupSafe [required: Any, installed: 1.0]
>      - Werkzeug [required: >=0.7, installed: 0.14.1]
>    - wtforms [required: Any, installed: 2.2.1]
>  - flask-appbuilder [required: >=1.12,<2.0.0, installed: 1.12.0]
>    - click [required: ==6.7, installed: 7.0]
>    - colorama [required: ==0.3.9, installed: 0.3.9]
>    - Flask [required: >=0.10.0,<0.12.99, installed: 0.12.4]
>      - click [required: >=2.0, installed: 7.0]
>      - itsdangerous [required: >=0.21, installed: 0.24]
>      - Jinja2 [required: >=2.4, installed: 2.8.1]
>        - MarkupSafe [required: Any, installed: 1.0]
>      - Werkzeug [required: >=0.7, installed: 0.14.1]
>    - Flask-Babel [required: ==0.11.1, installed: 0.11.1]
>      - Babel [required: >=2.3, installed: 2.6.0]
>        - pytz [required: >=0a, installed: 2018.5]
>      - Flask [required: Any, installed: 0.12.4]
>        - click [required: >=2.0, installed: 7.0]
>        - itsdangerous [required: >=0.21, installed: 0.24]
>        - Jinja2 [required: >=2.4, installed: 2.8.1]
>          - MarkupSafe [required: Any, installed: 1.0]
>        - Werkzeug [required: >=0.7, installed: 0.14.1]
>      - Jinja2 [required: >=2.5, installed: 2.8.1]
>        - MarkupSafe [required: Any, installed: 1.0]
>    - Flask-Login [required: >=0.3,<0.5, installed: 0.4.1]
>      - Flask [required: Any, installed: 0.12.4]
>        - click [required: >=2.0, installed: 7.0]
>        - itsdangerous [required: >=0.21, installed: 0.24]
>        - Jinja2 [required: >=2.4, installed: 2.8.1]
>          - MarkupSafe [required: Any, installed: 1.0]
>        - Werkzeug [required: >=0.7, installed: 0.14.1]
>    - Flask-OpenID [required: ==1.2.5, installed: 1.2.5]
>      - Flask [required: >=0.10.1, installed: 0.12.4]
>        - click [required: >=2.0, installed: 7.0]
>        - itsdangerous [required: >=0.21, installed: 0.24]
>        - Jinja2 [required: >=2.4, installed: 2.8.1]
>          - MarkupSafe [required: Any, installed: 1.0]
>        - Werkzeug [required: >=0.7, installed: 0.14.1]
>      - python3-openid [required: >=2.0, installed: 3.1.0]
>        - defusedxml [required: Any, installed: 0.5.0]
>    - Flask-SQLAlchemy [required: ==2.1, installed: 2.1]
>      - Flask [required: >=0.10, installed: 0.12.4]
>        - click [required: >=2.0, installed: 7.0]
>        - itsdangerous [required: >=0.21, installed: 0.24]
>        - Jinja2 [required: >=2.4, installed: 2.8.1]
>          - MarkupSafe [required: Any, installed: 1.0]
>        - Werkzeug [required: >=0.7, installed: 0.14.1]
>      - SQLAlchemy [required: >=0.7, installed: 1.1.18]
>    - Flask-WTF [required: ==0.14.2, installed: 0.14.2]
>      - Flask [required: Any, installed: 0.12.4]
>        - click [required: >=2.0, installed: 7.0]
>        - itsdangerous [required: >=0.21, installed: 0.24]
>        - Jinja2 [required: >=2.4, installed: 2.8.1]
>          - MarkupSafe [required: Any, installed: 1.0]
>        - Werkzeug [required: >=0.7, installed: 0.14.1]
>      - WTForms [required: Any, installed: 2.2.1]
>    - python-dateutil [required: >=2.3,<3, installed: 2.7.3]
>      - six [required: >=1.5, installed: 1.11.0]
>  - flask-caching [required: >=1.3.3,<1.4.0, installed: 1.3.3]
>    - Flask [required: Any, installed: 0.12.4]
>      - click [required: >=2.0, installed: 7.0]
>      - itsdangerous [required: >=0.21, installed: 0.24]
>      - Jinja2 [required: >=2.4, installed: 2.8.1]
>        - MarkupSafe [required: Any, installed: 1.0]
>      - Werkzeug [required: >=0.7, installed: 0.14.1]
>    - Werkzeug [required: >=0.12, installed: 0.14.1]
>  - flask-login [required: >=0.3,<0.5, installed: 0.4.1]
>    - Flask [required: Any, installed: 0.12.4]
>      - click [required: >=2.0, installed: 7.0]
>      - itsdangerous [required: >=0.21, installed: 0.24]
>      - Jinja2 [required: >=2.4, installed: 2.8.1]
>        - MarkupSafe [required: Any, installed: 1.0]
>      - Werkzeug [required: >=0.7, installed: 0.14.1]
>  - flask-swagger [required: ==0.2.13, installed: 0.2.13]
>    - Flask [required: >=0.10, installed: 0.12.4]
>      - click [required: >=2.0, installed: 7.0]
>      - itsdangerous [required: >=0.21, installed: 0.24]
>      - Jinja2 [required: >=2.4, installed: 2.8.1]
>        - MarkupSafe [required: Any, installed: 1.0]
>      - Werkzeug [required: >=0.7, installed: 0.14.1]
>    - PyYAML [required: >=3.0, installed: 3.13]
>  - flask-wtf [required: >=0.14.2,<0.15, installed: 0.14.2]
>    - Flask [required: Any, installed: 0.12.4]
>      - click [required: >=2.0, installed: 7.0]
>      - itsdangerous [required: >=0.21, installed: 0.24]
>      - Jinja2 [required: >=2.4, installed: 2.8.1]
>        - MarkupSafe [required: Any, installed: 1.0]
>      - Werkzeug [required: >=0.7, installed: 0.14.1]
>    - WTForms [required: Any, installed: 2.2.1]
>  - funcsigs [required: ==1.0.0, installed: 1.0.0]
>    - ordereddict [required: Any, installed: 1.1]
>  - future [required: >=0.16.0,<0.17, installed: 0.16.0]
>  - gitpython [required: >=2.0.2, installed: 2.1.11]
>    - gitdb2 [required: >=2.0.0, installed: 2.0.4]
>      - smmap2 [required: >=2.0.0, installed: 2.0.4]
>  - gunicorn [required: >=19.4.0,<20.0, installed: 19.9.0]
>  - iso8601 [required: >=0.1.12, installed: 0.1.12]
>  - jinja2 [required: >=2.7.3,<2.9.0, installed: 2.8.1]
>    - MarkupSafe [required: Any, installed: 1.0]
>  - lxml [required: >=4.0.0, installed: 4.2.5]
>  - markdown [required: >=2.5.2,<3.0, installed: 2.6.11]
>  - pandas [required: >=0.17.1,<1.0.0, installed: 0.23.4]
>    - numpy [required: >=1.9.0, installed: 1.15.2]
>    - python-dateutil [required: >=2.5.0, installed: 2.7.3]
>      - six [required: >=1.5, installed: 1.11.0]
>    - pytz [required: >=2011k, installed: 2018.5]
>  - pendulum [required: ==1.4.4, installed: 1.4.4]
>    - python-dateutil [required: >=2.6.0.0,<3.0.0.0, installed: 2.7.3]
>      - six [required: >=1.5, installed: 1.11.0]
>    - pytzdata [required: >=2018.3.0.0, installed: 2018.5]
>    - tzlocal [required: >=1.5.0.0,<2.0.0.0, installed: 1.5.1]
>      - pytz [required: Any, installed: 2018.5]
>  - psutil [required: >=4.2.0,<6.0.0, installed: 5.4.7]
>  - pygments [required: >=2.0.1,<3.0, installed: 2.2.0]
>  - python-daemon [required: >=2.1.1,<2.2, installed: 2.1.2]
>    - docutils [required: Any, installed: 0.14]
>    - lockfile [required: >=0.10, installed: 0.12.2]
>    - setuptools [required: Any, installed: 40.4.3]
>  - python-dateutil [required: >=2.3,<3, installed: 2.7.3]
>    - six [required: >=1.5, installed: 1.11.0]
>  - python-nvd3 [required: ==0.15.0, installed: 0.15.0]
>    - Jinja2 [required: >=2.8, installed: 2.8.1]
>      - MarkupSafe [required: Any, installed: 1.0]
>    - python-slugify [required: >=1.2.5, installed: 1.2.6]
>      - Unidecode [required: >=0.04.16, installed: 1.0.22]
>  - requests [required: >=2.5.1,<3, installed: 2.19.1]
>    - certifi [required: >=2017.4.17, installed: 2018.8.24]
>    - chardet [required: >=3.0.2,<3.1.0, installed: 3.0.4]
>    - idna [required: >=2.5,<2.8, installed: 2.7]
>    - urllib3 [required: >=1.21.1,<1.24, installed: 1.23]
>  - setproctitle [required: >=1.1.8,<2, installed: 1.1.10]
>  - sqlalchemy [required: >=1.1.15,<1.2.0, installed: 1.1.18]
>  - tabulate [required: >=0.7.5,<=0.8.2, installed: 0.8.2]
>  - tenacity [required: ==4.8.0, installed: 4.8.0]
>    - monotonic [required: >=0.6, installed: 1.5]
>    - six [required: >=1.9.0, installed: 1.11.0]
>  - thrift [required: >=0.9.2, installed: 0.11.0]
>    - six [required: >=1.7.2, installed: 1.11.0]
>  - tzlocal [required: >=1.4, installed: 1.5.1]
>    - pytz [required: Any, installed: 2018.5]
>  - unicodecsv [required: >=0.14.1, installed: 0.14.1]
>  - werkzeug [required: >=0.14.1,<0.15.0, installed: 0.14.1]
>  - zope.deprecation [required: >=4.0,<5.0, installed: 4.3.0]
>    - setuptools [required: Any, installed: 40.4.3]
> 
> On Thu, Oct 4, 2018 at 11:29 AM Kyle Hamlin <hamlin.kn@xxxxxxxxx> wrote:
> 
>> whoops remove the [[source]] at the end of the url = "
>> https://pypi.python.org/simple"; that is a typo.
>> 
>> On Thu, Oct 4, 2018 at 11:26 AM Kyle Hamlin <hamlin.kn@xxxxxxxxx> wrote:
>> 
>>> Thank you for the response Ash.
>>> 
>>> Even with your suggestion, there appear to be version conflicts all over
>>> the place. Can you get this Pipfile to install because I cannot?
>>> 
>>> *Pipfile:*
>>> 
>>> [[source]]
>>> url = "https://pypi.python.org/simple"; [[source]]
>>> verify_ssl = true
>>> name = "pypi"
>>> 
>>> [packages]
>>> apache-airflow = {editable = true, ref =
>>> "fb5ffd146a5a33820cfa7541e5ce09098f3d541a", git = "
>>> https://github.com/apache/incubator-airflow.git";, extras = ["s3",
>>> "slack", "kubernetes", "celery", "postgres", "mongo", "crypto"]}
>>> Flask-AppBuilder="==1.11.0"
>>> 
>>> [requires]
>>> python_version = "3.6"
>>> 
>>> 
>>> 
>>> 
>>> 
>>> 
>>> On Thu, Oct 4, 2018 at 10:50 AM Ash Berlin-Taylor <ash@xxxxxxxxxx> wrote:
>>> 
>>>> We've committed a fix for this to master and will include it in a 1.10.1
>>>> https://github.com/apache/incubator-airflow/commit/fb5ffd146a5a33820cfa7541e5ce09098f3d541a
>>>> 
>>>> 
>>>> For installing in the mea time pin `Flask-AppBuilder=1.11.0'
>>>> 
>>>>> On 4 Oct 2018, at 00:41, Kyle Hamlin <hamlin.kn@xxxxxxxxx> wrote:
>>>>> 
>>>>> Hi,
>>>>> 
>>>>> Today I was trying to upgrade Airflow to 1.10.0 and it appears that
>>>> there
>>>>> are some version conflicts with click and flask-login. I uncovered
>>>> these
>>>>> because I use Pipenv to manage our project's dependencies. You can see
>>>> here
>>>>> that Flask-AppBuilder pins click==6.7 and flask-login>=0.3,<0.5
>>>>> 
>>>>> 
>>>> https://github.com/dpgaspar/Flask-AppBuilder/blob/master/setup.py#L37-L47
>>>>> 
>>>>> I'm able to force pipenv to install click==6.7 because that is not
>>>> pinned
>>>>> in Airflow's setup.py, but I can do nothing about flask-login because
>>>>> Airflow pins the flask-login version:
>>>>> https://github.com/apache/incubator-airflow/blob/master/setup.py#L304
>>>>> 
>>>>> This prevents me from being able to upgrade to 1.10.0.
>>>>> 
>>>>> *Pipenv's Graphed project dependencies (conflicts highlighted):*
>>>>> 
>>>>> apache-airflow==1.10.0
>>>>> - alembic [required: >=0.8.3,<0.9, installed: 0.8.10]
>>>>>   - Mako [required: Any, installed: 1.0.7]
>>>>>     - MarkupSafe [required: >=0.9.2, installed: 1.0]
>>>>>   - python-editor [required: >=0.3, installed: 1.0.3]
>>>>>   - SQLAlchemy [required: >=0.7.6, installed: 1.2.12]
>>>>> - bleach [required: ==2.1.2, installed: 2.1.2]
>>>>>   - html5lib [required:
>>>>>> 
>>>> =0.99999999pre,!=1.0b8,!=1.0b7,!=1.0b6,!=1.0b5,!=1.0b4,!=1.0b3,!=1.0b2,!=1.0b1,
>>>>> installed: 1.0.1]
>>>>>     - six [required: >=1.9, installed: 1.11.0]
>>>>>     - webencodings [required: Any, installed: 0.5.1]
>>>>>   - six [required: Any, installed: 1.11.0]
>>>>> - configparser [required: >=3.5.0,<3.6.0, installed: 3.5.0]
>>>>> - croniter [required: >=0.3.17,<0.4, installed: 0.3.25]
>>>>>   - python-dateutil [required: Any, installed: 2.7.3]
>>>>>     - six [required: >=1.5, installed: 1.11.0]
>>>>> - dill [required: >=0.2.2,<0.3, installed: 0.2.8.2]
>>>>> - flask [required: >=0.12.4,<0.13, installed: 0.12.4]
>>>>>   - click [required: >=2.0, installed: 7.0]
>>>>>   - itsdangerous [required: >=0.21, installed: 0.24]
>>>>>   - Jinja2 [required: >=2.4, installed: 2.8.1]
>>>>>     - MarkupSafe [required: Any, installed: 1.0]
>>>>>   - Werkzeug [required: >=0.7, installed: 0.14.1]
>>>>> - flask-admin [required: ==1.4.1, installed: 1.4.1]
>>>>>   - Flask [required: >=0.7, installed: 0.12.4]
>>>>>     - click [required: >=2.0, installed: 7.0]
>>>>>     - itsdangerous [required: >=0.21, installed: 0.24]
>>>>>     - Jinja2 [required: >=2.4, installed: 2.8.1]
>>>>>       - MarkupSafe [required: Any, installed: 1.0]
>>>>>     - Werkzeug [required: >=0.7, installed: 0.14.1]
>>>>>   - wtforms [required: Any, installed: 2.2.1]
>>>>> - flask-appbuilder [required: >=1.11.1,<2.0.0, installed: 1.12.0]
>>>>>   - click [required: ==6.7, installed: 7.0]
>>>>>   - colorama [required: ==0.3.9, installed: 0.3.9]
>>>>>   - Flask [required: >=0.10.0,<0.12.99, installed: 0.12.4]
>>>>>     - click [required: >=2.0, installed: 7.0]
>>>>>     - itsdangerous [required: >=0.21, installed: 0.24]
>>>>>     - Jinja2 [required: >=2.4, installed: 2.8.1]
>>>>>       - MarkupSafe [required: Any, installed: 1.0]
>>>>>     - Werkzeug [required: >=0.7, installed: 0.14.1]
>>>>>   - Flask-Babel [required: ==0.11.1, installed: 0.11.1]
>>>>>     - Babel [required: >=2.3, installed: 2.6.0]
>>>>>       - pytz [required: >=0a, installed: 2018.5]
>>>>>     - Flask [required: Any, installed: 0.12.4]
>>>>>       - click [required: >=2.0, installed: 7.0]
>>>>>       - itsdangerous [required: >=0.21, installed: 0.24]
>>>>>       - Jinja2 [required: >=2.4, installed: 2.8.1]
>>>>>         - MarkupSafe [required: Any, installed: 1.0]
>>>>>       - Werkzeug [required: >=0.7, installed: 0.14.1]
>>>>>     - Jinja2 [required: >=2.5, installed: 2.8.1]
>>>>>       - MarkupSafe [required: Any, installed: 1.0]
>>>>>   - Flask-Login [required: >=0.3,<0.5, installed: 0.2.11]
>>>>>     - Flask [required: Any, installed: 0.12.4]
>>>>>       - click [required: >=2.0, installed: 7.0]
>>>>>       - itsdangerous [required: >=0.21, installed: 0.24]
>>>>>       - Jinja2 [required: >=2.4, installed: 2.8.1]
>>>>>         - MarkupSafe [required: Any, installed: 1.0]
>>>>>       - Werkzeug [required: >=0.7, installed: 0.14.1]
>>>>>   - Flask-OpenID [required: ==1.2.5, installed: 1.2.5]
>>>>>     - Flask [required: >=0.10.1, installed: 0.12.4]
>>>>>       - click [required: >=2.0, installed: 7.0]
>>>>>       - itsdangerous [required: >=0.21, installed: 0.24]
>>>>>       - Jinja2 [required: >=2.4, installed: 2.8.1]
>>>>>         - MarkupSafe [required: Any, installed: 1.0]
>>>>>       - Werkzeug [required: >=0.7, installed: 0.14.1]
>>>>>     - python3-openid [required: >=2.0, installed: 3.1.0]
>>>>>       - defusedxml [required: Any, installed: 0.5.0]
>>>>>   - Flask-SQLAlchemy [required: ==2.1, installed: 2.1]
>>>>>     - Flask [required: >=0.10, installed: 0.12.4]
>>>>>       - click [required: >=2.0, installed: 7.0]
>>>>>       - itsdangerous [required: >=0.21, installed: 0.24]
>>>>>       - Jinja2 [required: >=2.4, installed: 2.8.1]
>>>>>         - MarkupSafe [required: Any, installed: 1.0]
>>>>>       - Werkzeug [required: >=0.7, installed: 0.14.1]
>>>>>     - SQLAlchemy [required: >=0.7, installed: 1.2.12]
>>>>>   - Flask-WTF [required: ==0.14.2, installed: 0.14.2]
>>>>>     - Flask [required: Any, installed: 0.12.4]
>>>>>       - click [required: >=2.0, installed: 7.0]
>>>>>       - itsdangerous [required: >=0.21, installed: 0.24]
>>>>>       - Jinja2 [required: >=2.4, installed: 2.8.1]
>>>>>         - MarkupSafe [required: Any, installed: 1.0]
>>>>>       - Werkzeug [required: >=0.7, installed: 0.14.1]
>>>>>     - WTForms [required: Any, installed: 2.2.1]
>>>>>   - python-dateutil [required: >=2.3,<3, installed: 2.7.3]
>>>>>     - six [required: >=1.5, installed: 1.11.0]
>>>>> - flask-caching [required: >=1.3.3,<1.4.0, installed: 1.3.3]
>>>>>   - Flask [required: Any, installed: 0.12.4]
>>>>>     - click [required: >=2.0, installed: 7.0]
>>>>>     - itsdangerous [required: >=0.21, installed: 0.24]
>>>>>     - Jinja2 [required: >=2.4, installed: 2.8.1]
>>>>>       - MarkupSafe [required: Any, installed: 1.0]
>>>>>     - Werkzeug [required: >=0.7, installed: 0.14.1]
>>>>>   - Werkzeug [required: >=0.12, installed: 0.14.1]
>>>>> - flask-login [required: ==0.2.11, installed: 0.2.11]
>>>>>   - Flask [required: Any, installed: 0.12.4]
>>>>>     - click [required: >=2.0, installed: 7.0]
>>>>>     - itsdangerous [required: >=0.21, installed: 0.24]
>>>>>     - Jinja2 [required: >=2.4, installed: 2.8.1]
>>>>>       - MarkupSafe [required: Any, installed: 1.0]
>>>>>     - Werkzeug [required: >=0.7, installed: 0.14.1]
>>>>> - flask-swagger [required: ==0.2.13, installed: 0.2.13]
>>>>>   - Flask [required: >=0.10, installed: 0.12.4]
>>>>>     - click [required: >=2.0, installed: 7.0]
>>>>>     - itsdangerous [required: >=0.21, installed: 0.24]
>>>>>     - Jinja2 [required: >=2.4, installed: 2.8.1]
>>>>>       - MarkupSafe [required: Any, installed: 1.0]
>>>>>     - Werkzeug [required: >=0.7, installed: 0.14.1]
>>>>>   - PyYAML [required: >=3.0, installed: 3.13]
>>>>> - flask-wtf [required: >=0.14.2,<0.15, installed: 0.14.2]
>>>>>   - Flask [required: Any, installed: 0.12.4]
>>>>>     - click [required: >=2.0, installed: 7.0]
>>>>>     - itsdangerous [required: >=0.21, installed: 0.24]
>>>>>     - Jinja2 [required: >=2.4, installed: 2.8.1]
>>>>>       - MarkupSafe [required: Any, installed: 1.0]
>>>>>     - Werkzeug [required: >=0.7, installed: 0.14.1]
>>>>>   - WTForms [required: Any, installed: 2.2.1]
>>>>> - funcsigs [required: ==1.0.0, installed: 1.0.0]
>>>>>   - ordereddict [required: Any, installed: 1.1]
>>>>> - future [required: >=0.16.0,<0.17, installed: 0.16.0]
>>>>> - gitpython [required: >=2.0.2, installed: 2.1.11]
>>>>>   - gitdb2 [required: >=2.0.0, installed: 2.0.4]
>>>>>     - smmap2 [required: >=2.0.0, installed: 2.0.4]
>>>>> - gunicorn [required: >=19.4.0,<20.0, installed: 19.9.0]
>>>>> - iso8601 [required: >=0.1.12, installed: 0.1.12]
>>>>> - jinja2 [required: >=2.7.3,<2.9.0, installed: 2.8.1]
>>>>>   - MarkupSafe [required: Any, installed: 1.0]
>>>>> - lxml [required: >=3.6.0,<4.0, installed: 3.8.0]
>>>>> - markdown [required: >=2.5.2,<3.0, installed: 2.6.11]
>>>>> - pandas [required: >=0.17.1,<1.0.0, installed: 0.23.4]
>>>>>   - numpy [required: >=1.9.0, installed: 1.15.2]
>>>>>   - python-dateutil [required: >=2.5.0, installed: 2.7.3]
>>>>>     - six [required: >=1.5, installed: 1.11.0]
>>>>>   - pytz [required: >=2011k, installed: 2018.5]
>>>>> - pendulum [required: ==1.4.4, installed: 1.4.4]
>>>>>   - python-dateutil [required: >=2.6.0.0,<3.0.0.0, installed: 2.7.3]
>>>>>     - six [required: >=1.5, installed: 1.11.0]
>>>>>   - pytzdata [required: >=2018.3.0.0, installed: 2018.5]
>>>>>   - tzlocal [required: >=1.5.0.0,<2.0.0.0, installed: 1.5.1]
>>>>>     - pytz [required: Any, installed: 2018.5]
>>>>> - psutil [required: >=4.2.0,<5.0.0, installed: 4.4.2]
>>>>> - pygments [required: >=2.0.1,<3.0, installed: 2.2.0]
>>>>> - python-daemon [required: >=2.1.1,<2.2, installed: 2.1.2]
>>>>>   - docutils [required: Any, installed: 0.14]
>>>>>   - lockfile [required: >=0.10, installed: 0.12.2]
>>>>>   - setuptools [required: Any, installed: 40.4.3]
>>>>> - python-dateutil [required: >=2.3,<3, installed: 2.7.3]
>>>>>   - six [required: >=1.5, installed: 1.11.0]
>>>>> - python-nvd3 [required: ==0.15.0, installed: 0.15.0]
>>>>>   - Jinja2 [required: >=2.8, installed: 2.8.1]
>>>>>     - MarkupSafe [required: Any, installed: 1.0]
>>>>>   - python-slugify [required: >=1.2.5, installed: 1.2.6]
>>>>>     - Unidecode [required: >=0.04.16, installed: 1.0.22]
>>>>> - requests [required: >=2.5.1,<3, installed: 2.19.1]
>>>>>   - certifi [required: >=2017.4.17, installed: 2018.8.24]
>>>>>   - chardet [required: >=3.0.2,<3.1.0, installed: 3.0.4]
>>>>>   - idna [required: >=2.5,<2.8, installed: 2.7]
>>>>>   - urllib3 [required: >=1.21.1,<1.24, installed: 1.23]
>>>>> - setproctitle [required: >=1.1.8,<2, installed: 1.1.10]
>>>>> - sqlalchemy [required: >=1.1.15,<1.2.0, installed: 1.2.12]
>>>>> - tabulate [required: >=0.7.5,<0.8.0, installed: 0.7.7]
>>>>> - tenacity [required: ==4.8.0, installed: 4.8.0]
>>>>>   - monotonic [required: >=0.6, installed: 1.5]
>>>>>   - six [required: >=1.9.0, installed: 1.11.0]
>>>>> - thrift [required: >=0.9.2, installed: 0.11.0]
>>>>>   - six [required: >=1.7.2, installed: 1.11.0]
>>>>> - tzlocal [required: >=1.4, installed: 1.5.1]
>>>>>   - pytz [required: Any, installed: 2018.5]
>>>>> - unicodecsv [required: >=0.14.1, installed: 0.14.1]
>>>>> - werkzeug [required: >=0.14.1,<0.15.0, installed: 0.14.1]
>>>>> - zope.deprecation [required: >=4.0,<5.0, installed: 4.3.0]
>>>>>   - setuptools [required: Any, installed: 40.4.3]
>>>>> 
>>>>> --
>>>>> Kyle Hamlin
>>>> 
>>>> 
>>> 
>>> --
>>> Kyle Hamlin
>>> 
>> 
>> 
>> --
>> Kyle Hamlin
>> 
> 
> 
> -- 
> Kyle Hamlin