From 55e309125e70c66df3b5ab69eab003dc92ae218b Mon Sep 17 00:00:00 2001 From: Toby Harradine Date: Tue, 2 Jul 2019 11:53:38 +1000 Subject: [PATCH] Add uvloop as Posix+CPython dependency and tweak new Make recipes (#2819) - uvloop is now a dependency on non-Windows CPython systems - `make setupenv` renamed to `make newenv` - `make syncenv` added to sync local venv to current dependencies - `dev-requirements.txt` moved into `tools` directory --- .github/CONTRIBUTING.md | 9 +++++---- Makefile | 6 ++++-- make.bat | 11 ++++++++--- setup.cfg | 7 ++++--- dev-requirements.txt => tools/dev-requirements.txt | 0 tools/primary_deps.ini | 1 + 6 files changed, 22 insertions(+), 12 deletions(-) rename dev-requirements.txt => tools/dev-requirements.txt (100%) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 0858e15df..308b1d4ec 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -62,7 +62,7 @@ If you're not on Windows, you should also have GNU make installed, and you can o 1. Fork and clone the repository to a directory on your local machine. 2. Open a command line in that directory and execute the following command: ```bash - make setupenv + make newenv ``` Red, its dependencies, and all required development tools, are now installed to a virtual environment located in the `.venv` subdirectory. Red is installed in editable mode, meaning that edits you make to the source code in the repository will be reflected when you run Red. 3. Activate the new virtual environment with one of the following commands: @@ -76,7 +76,7 @@ If you're not on Windows, you should also have GNU make installed, and you can o ``` Each time you open a new command line, you should execute this command first. From here onwards, we will assume you are executing commands from within this activated virtual environment. -**Note:** If you're comfortable with setting up virtual environments yourself and would rather do it manually, just run `pip install -r dev-requirements.txt` after setting it up. +**Note:** If you're comfortable with setting up virtual environments yourself and would rather do it manually, just run `pip install -Ur tools/dev-requirements.txt` after setting it up. ### 4.2 Testing We've recently started using [tox](https://github.com/tox-dev/tox) to run all of our tests. It's extremely simple to use, and if you followed the previous section correctly, it is already installed to your virtual environment. @@ -101,10 +101,11 @@ Use the command `black --help` to see how to use this tool. The full style guide You may have noticed we have a `Makefile` and a `make.bat` in the top-level directory. For now, you can do three things with them: 1. `make reformat`: Reformat all python files in the project with Black 2. `make stylecheck`: Check if any `.py` files in the project need reformatting -3. `make setupenv`: Set up a new virtual environment in the `.venv` subdirectory, and install Red and its dependencies. If one already exists, it is cleared out and replaced. +3. `make newenv`: Set up a new virtual environment in the `.venv` subdirectory, and install Red and its dependencies. If one already exists, it is cleared out and replaced. +4. `make syncenv`: Sync your environment with Red's latest dependencies. ### 4.5 Keeping your dependencies up to date -Whenever you pull from upstream (V3/develop on the main repository) and you notice either of the files `setup.cfg` or `dev-requirements.txt` have been changed, it can often mean some package dependencies have been updated, added or removed. To make sure you're testing and formatting with the most up-to-date versions of our dependencies, run `make setupenv` to recreate your virtual environment. You could also simply do `pip install -Ur dev-requirements.txt`, but you will still have any dependencies which may have been removed previously. +Whenever you pull from upstream (V3/develop on the main repository) and you notice either of the files `setup.cfg` or `tools/dev-requirements.txt` have been changed, it can often mean some package dependencies have been updated, added or removed. To make sure you're testing and formatting with the most up-to-date versions of our dependencies, run `make syncenv`. You could also simply do `make newenv` to install them to a clean new virtual environment. ### 4.6 To contribute changes diff --git a/Makefile b/Makefile index 6280b2bfb..a39d615e7 100644 --- a/Makefile +++ b/Makefile @@ -18,7 +18,9 @@ bumpdeps: python tools/bumpdeps.py # Development environment -setupenv: +newenv: python3.7 -m venv --clear .venv .venv/bin/pip install -U pip setuptools - .venv/bin/pip install -Ur dev-requirements.txt + $(MAKE) syncenv +syncenv: + .venv/bin/pip install -Ur ./tools/dev-requirements.txt diff --git a/make.bat b/make.bat index cf71ab715..7f9b79df6 100644 --- a/make.bat +++ b/make.bat @@ -21,10 +21,13 @@ exit /B %ERRORLEVEL% black -l 99 --check !PYFILES! exit /B %ERRORLEVEL% -:setupenv +:newenv py -3.7 -m venv --clear .venv .\.venv\Scripts\python -m pip install -U pip setuptools -.\.venv\Scripts\python -m pip install -Ur dev-requirements.txt +goto syncenv + +:syncenv +.\.venv\Scripts\python -m pip install -Ur .\tools\dev-requirements.txt exit /B %ERRORLEVEL% :help @@ -34,4 +37,6 @@ echo. echo Commands: echo reformat Reformat all .py files being tracked by git. echo stylecheck Check which tracked .py files need reformatting. -echo setupenv Create or replace a virtual environment for development. +echo newenv Create or replace this project's virtual environment. +echo syncenv Sync this project's virtual environment to Red's latest +echo dependencies. diff --git a/setup.cfg b/setup.cfg index 30386aea5..6f1c51690 100644 --- a/setup.cfg +++ b/setup.cfg @@ -45,6 +45,7 @@ install_requires = Red-Lavalink==0.3.0 schema==0.7.0 tqdm==4.32.2 + uvloop==0.12.2; sys_platform != "win32" and platform_python_implementation == "CPython" websockets==6.0 yarl==1.3.0 @@ -63,7 +64,7 @@ docs = pytz==2019.1 requests==2.22.0 six==1.12.0 - snowballstemmer==1.2.1 + snowballstemmer==1.9.0 Sphinx==2.1.2 sphinx-rtd-theme==0.4.3 sphinxcontrib-applehelp==1.0.1 @@ -88,13 +89,13 @@ test = isort==4.3.21 lazy-object-proxy==1.4.1 mccabe==0.6.1 - more-itertools==7.0.0 + more-itertools==7.1.0 packaging==19.0 pluggy==0.12.0 py==1.8.0 pylint==2.3.1 pyparsing==2.4.0 - pytest==4.6.3 + pytest==5.0.0 pytest-asyncio==0.10.0 six==1.12.0 typed-ast==1.4.0 diff --git a/dev-requirements.txt b/tools/dev-requirements.txt similarity index 100% rename from dev-requirements.txt rename to tools/dev-requirements.txt diff --git a/tools/primary_deps.ini b/tools/primary_deps.ini index ef0a58cff..f35aa103c 100644 --- a/tools/primary_deps.ini +++ b/tools/primary_deps.ini @@ -19,6 +19,7 @@ install_requires = Red-Lavalink schema tqdm + uvloop; sys_platform != "win32" and platform_python_implementation == "CPython" # Websockets is a secondary dependency, but until pip has a complete dependency resolver, we # need to list it here to avoid an incompatible version being installed. # See under point 2 here: https://pip.pypa.io/en/stable/user_guide/#requirements-files