Merge pull request #62 from CartoDB/60-remove-venv-activation
Remove virtualenv activation #60
This commit is contained in:
commit
284d8ede44
2
.github/PULL_REQUEST_TEMPLATE.md
vendored
2
.github/PULL_REQUEST_TEMPLATE.md
vendored
@ -1,6 +1,6 @@
|
|||||||
|
|
||||||
- [ ] All declared geometries are `geometry(Geometry, 4326)` for general geoms, or `geometry(Point, 4326)`
|
- [ ] All declared geometries are `geometry(Geometry, 4326)` for general geoms, or `geometry(Point, 4326)`
|
||||||
- [ ] Include python is activated for new functions. Include this before importing modules: `plpy.execute('SELECT cdb_crankshaft._cdb_crankshaft_activate_py()')`
|
- [ ] Existing functions in crankshaft python library called from the extension are kept at least from version N to version N+1 (to avoid breakage during upgrades).
|
||||||
- [ ] Docs for public-facing functions are written
|
- [ ] Docs for public-facing functions are written
|
||||||
- [ ] New functions follow the naming conventions: `CDB_NameOfFunction`. Where internal functions begin with an underscore `_`.
|
- [ ] New functions follow the naming conventions: `CDB_NameOfFunction`. Where internal functions begin with an underscore `_`.
|
||||||
- [ ] If appropriate, new functions accepts an arbitrary query as an input (see [Crankshaft Issue #6](https://github.com/CartoDB/crankshaft/issues/6) for more information)
|
- [ ] If appropriate, new functions accepts an arbitrary query as an input (see [Crankshaft Issue #6](https://github.com/CartoDB/crankshaft/issues/6) for more information)
|
||||||
|
8
Makefile
8
Makefile
@ -11,7 +11,6 @@ PYP_DIR = src/py
|
|||||||
# Generate and install developmet versions of the extension
|
# Generate and install developmet versions of the extension
|
||||||
# and python package.
|
# and python package.
|
||||||
# The extension is named 'dev' with a 'current' alias for easily upgrading.
|
# The extension is named 'dev' with a 'current' alias for easily upgrading.
|
||||||
# The Python package is installed in a virtual environment envs/dev/
|
|
||||||
# Requires sudo.
|
# Requires sudo.
|
||||||
install: ## Generate and install development version of the extension; requires sudo.
|
install: ## Generate and install development version of the extension; requires sudo.
|
||||||
$(MAKE) -C $(PYP_DIR) install
|
$(MAKE) -C $(PYP_DIR) install
|
||||||
@ -29,7 +28,6 @@ release: ## Generate a new release of the extension. Only for telease manager
|
|||||||
$(MAKE) -C $(PYP_DIR) release
|
$(MAKE) -C $(PYP_DIR) release
|
||||||
|
|
||||||
# Install the current release.
|
# Install the current release.
|
||||||
# The Python package is installed in a virtual environment envs/X.Y.Z/
|
|
||||||
# Requires sudo.
|
# Requires sudo.
|
||||||
# Use the RELEASE_VERSION environment variable to deploy a specific version:
|
# Use the RELEASE_VERSION environment variable to deploy a specific version:
|
||||||
# sudo make deploy RELEASE_VERSION=1.0.0
|
# sudo make deploy RELEASE_VERSION=1.0.0
|
||||||
@ -52,11 +50,7 @@ clean-release: ## clean up current release
|
|||||||
rm -rf release/python/$(RELEASE_VERSION)
|
rm -rf release/python/$(RELEASE_VERSION)
|
||||||
rm -f release/$(RELEASE_VERSION)--*.sql
|
rm -f release/$(RELEASE_VERSION)--*.sql
|
||||||
|
|
||||||
# Cleanup all virtual environments
|
clean-all: clean-dev clean-release
|
||||||
clean-environments: ## clean up all virtual environments
|
|
||||||
rm -rf envs/*
|
|
||||||
|
|
||||||
clean-all: clean-dev clean-release clean-environments
|
|
||||||
|
|
||||||
help:
|
help:
|
||||||
@IFS=$$'\n' ; \
|
@IFS=$$'\n' ; \
|
||||||
|
@ -9,11 +9,10 @@ CartoDB Spatial Analysis extension for PostgreSQL.
|
|||||||
* - *src/pg* contains the PostgreSQL extension source code
|
* - *src/pg* contains the PostgreSQL extension source code
|
||||||
* - *src/py* Python module source code
|
* - *src/py* Python module source code
|
||||||
* *release* reseleased versions
|
* *release* reseleased versions
|
||||||
* *env* base directory for Python virtual environments
|
|
||||||
|
|
||||||
## Requirements
|
## Requirements
|
||||||
|
|
||||||
* pip, virtualenv, PostgreSQL
|
* pip, PostgreSQL
|
||||||
* python-scipy system package (see [src/py/README.md](https://github.com/CartoDB/crankshaft/blob/master/src/py/README.md))
|
* python-scipy system package (see [src/py/README.md](https://github.com/CartoDB/crankshaft/blob/master/src/py/README.md))
|
||||||
|
|
||||||
# Working Process -- Quickstart Guide
|
# Working Process -- Quickstart Guide
|
||||||
|
@ -7,7 +7,6 @@ include ../../Makefile.global
|
|||||||
# requires sudo. In additionof the current development version
|
# requires sudo. In additionof the current development version
|
||||||
# named 'dev', an alias 'current' is generating for ease of
|
# named 'dev', an alias 'current' is generating for ease of
|
||||||
# update (upgrade to 'current', then to 'dev').
|
# update (upgrade to 'current', then to 'dev').
|
||||||
# the python module is installed in a virtualenv in envs/dev/
|
|
||||||
# * test runs the tests for the currently generated Development
|
# * test runs the tests for the currently generated Development
|
||||||
# extension.
|
# extension.
|
||||||
|
|
||||||
@ -18,11 +17,8 @@ DATA = $(EXTENSION)--dev.sql \
|
|||||||
SOURCES_DATA_DIR = sql
|
SOURCES_DATA_DIR = sql
|
||||||
SOURCES_DATA = $(wildcard $(SOURCES_DATA_DIR)/*.sql)
|
SOURCES_DATA = $(wildcard $(SOURCES_DATA_DIR)/*.sql)
|
||||||
|
|
||||||
VIRTUALENV_PATH = $(realpath ../../envs)
|
|
||||||
ESC_VIRVIRTUALENV_PATH = $(subst /,\/,$(VIRTUALENV_PATH))
|
|
||||||
|
|
||||||
REPLACEMENTS = -e 's/@@VERSION@@/$(EXTVERSION)/g' \
|
REPLACEMENTS = -e 's/@@VERSION@@/$(EXTVERSION)/g'
|
||||||
-e 's/@@VIRTUALENV_PATH@@/$(ESC_VIRVIRTUALENV_PATH)/g'
|
|
||||||
|
|
||||||
$(DATA): $(SOURCES_DATA)
|
$(DATA): $(SOURCES_DATA)
|
||||||
$(SED) $(REPLACEMENTS) $(SOURCES_DATA_DIR)/*.sql > $@
|
$(SED) $(REPLACEMENTS) $(SOURCES_DATA_DIR)/*.sql > $@
|
||||||
@ -54,7 +50,6 @@ release: ../../release/$(EXTENSION).control $(SOURCES_DATA)
|
|||||||
$(SED) $(REPLACEMENTS) $(SOURCES_DATA_DIR)/*.sql > ../../release/$(EXTENSION)--$(EXTVERSION).sql
|
$(SED) $(REPLACEMENTS) $(SOURCES_DATA_DIR)/*.sql > ../../release/$(EXTENSION)--$(EXTVERSION).sql
|
||||||
|
|
||||||
# Install the current relese into the PostgreSQL extensions directory
|
# Install the current relese into the PostgreSQL extensions directory
|
||||||
# and the Python package in a virtual environment envs/X.Y.Z
|
|
||||||
deploy:
|
deploy:
|
||||||
$(INSTALL_DATA) ../../release/$(EXTENSION).control '$(DESTDIR)$(datadir)/extension/'
|
$(INSTALL_DATA) ../../release/$(EXTENSION).control '$(DESTDIR)$(datadir)/extension/'
|
||||||
$(INSTALL_DATA) ../../release/*.sql '$(DESTDIR)$(datadir)/extension/'
|
$(INSTALL_DATA) ../../release/*.sql '$(DESTDIR)$(datadir)/extension/'
|
||||||
|
@ -1,23 +0,0 @@
|
|||||||
CREATE OR REPLACE FUNCTION _cdb_crankshaft_virtualenvs_path()
|
|
||||||
RETURNS text
|
|
||||||
AS $$
|
|
||||||
BEGIN
|
|
||||||
-- RETURN '/opt/virtualenvs/crankshaft';
|
|
||||||
RETURN '@@VIRTUALENV_PATH@@';
|
|
||||||
END;
|
|
||||||
$$ language plpgsql IMMUTABLE STRICT;
|
|
||||||
|
|
||||||
-- Use the crankshaft python module
|
|
||||||
CREATE OR REPLACE FUNCTION _cdb_crankshaft_activate_py()
|
|
||||||
RETURNS VOID
|
|
||||||
AS $$
|
|
||||||
import os
|
|
||||||
# plpy.notice('%',str(os.environ))
|
|
||||||
# activate virtualenv
|
|
||||||
crankshaft_version = plpy.execute('SELECT cdb_crankshaft._cdb_crankshaft_internal_version()')[0]['_cdb_crankshaft_internal_version']
|
|
||||||
base_path = plpy.execute('SELECT cdb_crankshaft._cdb_crankshaft_virtualenvs_path()')[0]['_cdb_crankshaft_virtualenvs_path']
|
|
||||||
default_venv_path = os.path.join(base_path, crankshaft_version)
|
|
||||||
venv_path = os.environ.get('CRANKSHAFT_VENV', default_venv_path)
|
|
||||||
activate_path = venv_path + '/bin/activate_this.py'
|
|
||||||
exec(open(activate_path).read(), dict(__file__=activate_path))
|
|
||||||
$$ LANGUAGE plpythonu;
|
|
@ -4,7 +4,6 @@
|
|||||||
CREATE OR REPLACE FUNCTION
|
CREATE OR REPLACE FUNCTION
|
||||||
_cdb_random_seeds (seed_value INTEGER) RETURNS VOID
|
_cdb_random_seeds (seed_value INTEGER) RETURNS VOID
|
||||||
AS $$
|
AS $$
|
||||||
plpy.execute('SELECT cdb_crankshaft._cdb_crankshaft_activate_py()')
|
|
||||||
from crankshaft import random_seeds
|
from crankshaft import random_seeds
|
||||||
random_seeds.set_random_seeds(seed_value)
|
random_seeds.set_random_seeds(seed_value)
|
||||||
$$ LANGUAGE plpythonu;
|
$$ LANGUAGE plpythonu;
|
||||||
|
@ -10,7 +10,6 @@ CREATE OR REPLACE FUNCTION
|
|||||||
id_col TEXT DEFAULT 'cartodb_id')
|
id_col TEXT DEFAULT 'cartodb_id')
|
||||||
RETURNS TABLE (moran NUMERIC, significance NUMERIC)
|
RETURNS TABLE (moran NUMERIC, significance NUMERIC)
|
||||||
AS $$
|
AS $$
|
||||||
plpy.execute('SELECT cdb_crankshaft._cdb_crankshaft_activate_py()')
|
|
||||||
from crankshaft.clustering import moran_local
|
from crankshaft.clustering import moran_local
|
||||||
# TODO: use named parameters or a dictionary
|
# TODO: use named parameters or a dictionary
|
||||||
return moran(subquery, column_name, w_type, num_ngbrs, permutations, geom_col, id_col)
|
return moran(subquery, column_name, w_type, num_ngbrs, permutations, geom_col, id_col)
|
||||||
@ -28,7 +27,6 @@ CREATE OR REPLACE FUNCTION
|
|||||||
id_col TEXT)
|
id_col TEXT)
|
||||||
RETURNS TABLE (moran NUMERIC, quads TEXT, significance NUMERIC, rowid INT, vals NUMERIC)
|
RETURNS TABLE (moran NUMERIC, quads TEXT, significance NUMERIC, rowid INT, vals NUMERIC)
|
||||||
AS $$
|
AS $$
|
||||||
plpy.execute('SELECT cdb_crankshaft._cdb_crankshaft_activate_py()')
|
|
||||||
from crankshaft.clustering import moran_local
|
from crankshaft.clustering import moran_local
|
||||||
# TODO: use named parameters or a dictionary
|
# TODO: use named parameters or a dictionary
|
||||||
return moran_local(subquery, column_name, w_type, num_ngbrs, permutations, geom_col, id_col)
|
return moran_local(subquery, column_name, w_type, num_ngbrs, permutations, geom_col, id_col)
|
||||||
@ -122,7 +120,6 @@ CREATE OR REPLACE FUNCTION
|
|||||||
id_col TEXT DEFAULT 'cartodb_id')
|
id_col TEXT DEFAULT 'cartodb_id')
|
||||||
RETURNS TABLE (moran FLOAT, significance FLOAT)
|
RETURNS TABLE (moran FLOAT, significance FLOAT)
|
||||||
AS $$
|
AS $$
|
||||||
plpy.execute('SELECT cdb_crankshaft._cdb_crankshaft_activate_py()')
|
|
||||||
from crankshaft.clustering import moran_local
|
from crankshaft.clustering import moran_local
|
||||||
# TODO: use named parameters or a dictionary
|
# TODO: use named parameters or a dictionary
|
||||||
return moran_rate(subquery, numerator, denominator, w_type, num_ngbrs, permutations, geom_col, id_col)
|
return moran_rate(subquery, numerator, denominator, w_type, num_ngbrs, permutations, geom_col, id_col)
|
||||||
@ -143,7 +140,6 @@ CREATE OR REPLACE FUNCTION
|
|||||||
RETURNS
|
RETURNS
|
||||||
TABLE(moran NUMERIC, quads TEXT, significance NUMERIC, rowid INT, vals NUMERIC)
|
TABLE(moran NUMERIC, quads TEXT, significance NUMERIC, rowid INT, vals NUMERIC)
|
||||||
AS $$
|
AS $$
|
||||||
plpy.execute('SELECT cdb_crankshaft._cdb_crankshaft_activate_py()')
|
|
||||||
from crankshaft.clustering import moran_local_rate
|
from crankshaft.clustering import moran_local_rate
|
||||||
# TODO: use named parameters or a dictionary
|
# TODO: use named parameters or a dictionary
|
||||||
return moran_local_rate(subquery, numerator, denominator, w_type, num_ngbrs, permutations, geom_col, id_col)
|
return moran_local_rate(subquery, numerator, denominator, w_type, num_ngbrs, permutations, geom_col, id_col)
|
||||||
|
@ -2,14 +2,11 @@ include ../../Makefile.global
|
|||||||
|
|
||||||
# Install the package locally for development
|
# Install the package locally for development
|
||||||
install:
|
install:
|
||||||
virtualenv --system-site-packages ../../envs/dev
|
pip install ./crankshaft
|
||||||
# source ../../envs/dev/bin/activate
|
|
||||||
../../envs/dev/bin/pip install -I ./crankshaft
|
|
||||||
../../envs/dev/bin/pip install -I nose
|
|
||||||
|
|
||||||
# Test develpment install
|
# Test develpment install
|
||||||
test:
|
test:
|
||||||
../../envs/dev/bin/nosetests crankshaft/test/
|
nosetests crankshaft/test/
|
||||||
|
|
||||||
release: ../../release/$(EXTENSION).control $(SOURCES_DATA)
|
release: ../../release/$(EXTENSION).control $(SOURCES_DATA)
|
||||||
mkdir -p ../../release/python/$(EXTVERSION)
|
mkdir -p ../../release/python/$(EXTVERSION)
|
||||||
@ -17,6 +14,4 @@ release: ../../release/$(EXTENSION).control $(SOURCES_DATA)
|
|||||||
$(SED) -i -r 's/version='"'"'[0-9]+\.[0-9]+\.[0-9]+'"'"'/version='"'"'$(EXTVERSION)'"'"'/g' ../../release/python/$(EXTVERSION)/$(PACKAGE)/setup.py
|
$(SED) -i -r 's/version='"'"'[0-9]+\.[0-9]+\.[0-9]+'"'"'/version='"'"'$(EXTVERSION)'"'"'/g' ../../release/python/$(EXTVERSION)/$(PACKAGE)/setup.py
|
||||||
|
|
||||||
deploy:
|
deploy:
|
||||||
virtualenv --system-site-packages $(VIRTUALENV_PATH)/$(RELEASE_VERSION)
|
pip install --upgrade ../../release/python/$(RELEASE_VERSION)/$(PACKAGE)
|
||||||
$(VIRTUALENV_PATH)/$(RELEASE_VERSION)/bin/pip install -I -U ../../release/python/$(RELEASE_VERSION)/$(PACKAGE)
|
|
||||||
$(VIRTUALENV_PATH)/$(RELEASE_VERSION)/bin/pip install -I nose
|
|
||||||
|
@ -10,7 +10,6 @@ nosetests test/
|
|||||||
|
|
||||||
## Notes about Python dependencies
|
## Notes about Python dependencies
|
||||||
* This extension is targeted at production databases. Therefore certain restrictions must be assumed about the production environment vs other experimental environments.
|
* This extension is targeted at production databases. Therefore certain restrictions must be assumed about the production environment vs other experimental environments.
|
||||||
* We're using `pip` and `virtualenv` to generate a suitable isolated environment for python code that has all the dependencies
|
|
||||||
* Every dependency should be:
|
* Every dependency should be:
|
||||||
- Added to the `setup.py` file
|
- Added to the `setup.py` file
|
||||||
- Installed through it
|
- Installed through it
|
||||||
@ -30,21 +29,7 @@ PySAL 1.10 or later, so we'll stick to 1.9.1.
|
|||||||
apt-get install -y python-scipy
|
apt-get install -y python-scipy
|
||||||
```
|
```
|
||||||
|
|
||||||
We'll use virtual environments to install our packages,
|
#### Test the libraries
|
||||||
but configued to use also system modules so that the
|
|
||||||
mentioned scipy and numpy are used.
|
|
||||||
|
|
||||||
# Create a virtual environment for python
|
|
||||||
$ virtualenv --system-site-packages dev
|
|
||||||
|
|
||||||
# Activate the virtualenv
|
|
||||||
$ source dev/bin/activate
|
|
||||||
|
|
||||||
# Install all the requirements
|
|
||||||
# expect this to take a while, as it will trigger a few compilations
|
|
||||||
(dev) $ pip install -I ./crankshaft
|
|
||||||
|
|
||||||
#### Test the libraries with that virtual env
|
|
||||||
|
|
||||||
##### Test numpy library dependency:
|
##### Test numpy library dependency:
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user