Skip to main content

CKAN extensions - adding to your installation

 

Following the information on the CKAN site

Use the CKAN create command to create an empty extension:

Activate your CKAN virtual environment, for example:

. /usr/lib/ckan/default/bin/activate

Then check your location is

cd /usr/lib/ckan/default/src

So you can execute the create command

ckan -c /etc/ckan/default/ckan.ini create -t ckanext ckanext-example_theme

 

Error – dev-requirements.txt

However, when running this command the response was 

INFO  [ckan.cli] Using configuration file /etc/ckan/default/ckan.ini
INFO  [ckan.config.environment] Loading static files from public
INFO  [ckan.config.environment] Loading templates from /usr/lib/ckan/default/src/ckan/ckan/templates
INFO  [ckan.config.environment] Loading templates from /usr/lib/ckan/default/src/ckan/ckan/templates
Usage: ckan [OPTIONS] COMMAND [ARGS]...

Error: No such command 'create'.

 

First check, did you install CKAN dev requirements? As above we have activated the virtual environment and our location is already at

cd /usr/lib/ckan/default/src

For more details about installing the requirements and dev-requirements txt files see the Appendix at the end of this article.  Now install like

pip install -r dev-requirements.txt

Response

Traceback (most recent call last):
  File "/usr/lib/ckan/default/bin/pip", line 5, in <module>
    from pip._internal.cli.main import main
  File "/usr/lib/ckan/default/lib/python3.8/site-packages/pip/_internal/cli/main.py", line 10, in <module>
    from pip._internal.cli.autocompletion import autocomplete
  File "/usr/lib/ckan/default/lib/python3.8/site-packages/pip/_internal/cli/autocompletion.py", line 9, in <module>
    from pip._internal.cli.main_parser import create_main_parser
  File "/usr/lib/ckan/default/lib/python3.8/site-packages/pip/_internal/cli/main_parser.py", line 7, in <module>
    from pip._internal.cli import cmdoptions
  File "/usr/lib/ckan/default/lib/python3.8/site-packages/pip/_internal/cli/cmdoptions.py", line 25, in <module>
    from pip._internal.locations import USER_CACHE_DIR, get_src_prefix
  File "/usr/lib/ckan/default/lib/python3.8/site-packages/pip/_internal/locations.py", line 19, in <module>
    from pip._internal.utils import appdirs
  File "/usr/lib/ckan/default/lib/python3.8/site-packages/pip/_internal/utils/appdirs.py", line 13, in <module>
    from pip._vendor import appdirs as _appdirs
ImportError: cannot import name 'appdirs' from 'pip._vendor' (/usr/lib/ckan/default/lib/python3.8/site-packages/pip/_vendor/__init__.py)

Error - is pip installed

Is pip installed.  Check by executing

pip -V

If your response is errors, then pip needs to be installed.

sudo apt install python3-pip

Post running the install command, when I run the version check for pip (pip -V)  the response is now

pip 20.0.2 from /usr/lib/ckan/default/lib/python3.8/site-packages/pip (python 3.8)

And now the dev-requirements.txt install runs - yay

 

Back to the original intent

This sequence started because I needed to install 

ckan -c /etc/ckan/default/ckan.ini create -t ckanext ckanext-example_theme

However, that was failing me.  Another option was to execute

ckan -c /etc/ckan/default/ckan.ini generate extension -o ckanext/ckanext-example_theme

Now I discover another issue.  The response

`cookiecutter` library is missing from import path.
Make sure you have dev-dependencies installed:
	pip install -r dev-requirements.txt

Time to install cookiecutter

pip install cookiecutter

 

requirements and dev-requirements installed

Installing the extension again?  Attempting to run cookiecutter to create your extension:

cookiecutter ckan/contrib/cookiecutter/ckan_extension/

Complete the extension prompts

project [Projects name (must begin with 'ckanext-')]: 
keywords [A space separated list of keywords]:
description []: 
author []:
author_email []:
github_user_name [Github user or organization name]:
project_shortname:
plugin_class_name:

Once each of the prompts has been completed, the response wasn't what I was anticipating

Traceback (most recent call last):
  File "/home/{project}/.local/lib/python3.8/site-packages/cookiecutter/hooks.py", line 83, in run_script
    proc = subprocess.Popen(
  File "/usr/lib/python3.8/subprocess.py", line 858, in __init__
    self._execute_child(args, executable, preexec_fn, close_fds,
  File "/usr/lib/python3.8/subprocess.py", line 1704, in _execute_child
    raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: '/usr/lib/ckan/default/src/ckanext-main_theme'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/{project}/.local/lib/python3.8/site-packages/cookiecutter/generate.py", line 236, in _run_hook_from_repo_dir
    run_hook(hook_name, project_dir, context)
  File "/home/{project}/.local/lib/python3.8/site-packages/cookiecutter/hooks.py", line 145, in run_hook
    run_script_with_context(script, project_dir, context)
  File "/home/{project}/.local/lib/python3.8/site-packages/cookiecutter/hooks.py", line 129, in run_script_with_context
    run_script(temp.name, cwd)
  File "/home/{project}/.local/lib/python3.8/site-packages/cookiecutter/hooks.py", line 99, in run_script
    raise FailedHookException(
cookiecutter.exceptions.FailedHookException: Hook script failed (error: [Errno 2] No such file or directory: '/usr/lib/ckan/default/src/ckanext-main_theme')

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/lib/python3.8/shutil.py", line 707, in rmtree
    orig_st = os.lstat(path)
FileNotFoundError: [Errno 2] No such file or directory: '/usr/lib/ckan/default/src/ckanext-main_theme'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/{project}/.local/bin/cookiecutter", line 8, in <module>
    sys.exit(main())
  File "/home/{project}/.local/lib/python3.8/site-packages/click/core.py", line 829, in __call__
    return self.main(*args, **kwargs)
  File "/home/{project}/.local/lib/python3.8/site-packages/click/core.py", line 782, in main
    rv = self.invoke(ctx)
  File "/home/{project}/.local/lib/python3.8/site-packages/click/core.py", line 1066, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/home/{project}/.local/lib/python3.8/site-packages/click/core.py", line 610, in invoke
    return callback(*args, **kwargs)
  File "/home/{project}/.local/lib/python3.8/site-packages/cookiecutter/cli.py", line 113, in main
    cookiecutter(
  File "/home/{project}/.local/lib/python3.8/site-packages/cookiecutter/main.py", line 90, in cookiecutter
    result = generate_files(
  File "/home/{project}/.local/lib/python3.8/site-packages/cookiecutter/generate.py", line 293, in generate_files
    _run_hook_from_repo_dir(
  File "/home/{project}/.local/lib/python3.8/site-packages/cookiecutter/generate.py", line 239, in _run_hook_from_repo_dir
    rmtree(project_dir)
  File "/home/{project}/.local/lib/python3.8/site-packages/cookiecutter/utils.py", line 34, in rmtree
    shutil.rmtree(path, onerror=force_delete)
  File "/usr/lib/python3.8/shutil.py", line 709, in rmtree
    onerror(os.lstat, path, sys.exc_info())
  File "/home/{project}/.local/lib/python3.8/site-packages/cookiecutter/utils.py", line 25, in force_delete
    os.chmod(path, stat.S_IWRITE)
FileNotFoundError: [Errno 2] No such file or directory: '/usr/lib/ckan/default/src/ckanext-main_theme'

Ok, so a permission issue.  I need to cross-check where I'm installing:

Trying the command

ckan generate extension

Response same as above.

 

Directory - can you make a new directory?

As the issue is permission-based, whilst in your virtual environment try creating a directory.  In the directory 

/usr/lib/ckan/default/src

Using the mkdir command, I received the following response

mkdir: cannot create directory ‘{your_directory_name}’: Permission denied

The directory src owner is root:root.  I'm working as a virtual environment so root won't cut it.  Change the ownership

 

What about if I set the path?

ckan generate extension -o ckan/ckanext

Response:

Written: ckan/ckanext/ckanext-main_theme

Working!

 

Now I'll review changing src directory ownership. and attempt the process again.

ckan generate extension

Prompts

Extension's name [must begin 'ckanext-']: ckanext-{module}
Author's name []: {author}
Author's email []: {email}
Your Github user or organization name []: {company}
Brief description of the project []: {project}
List of keywords (separated by spaces) [CKAN]:

Response:

Written: /usr/lib/ckan/default/src/ckanext-{project}

 

 

Appendix

When you run the following commands, ensure that you have not activated the virtual environment.

Installing requirements.txt

Command

pip install -r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/requirements.txt

Response

Defaulting to user installation because normal site-packages is not writeable
Requirement already satisfied: alembic==1.0.0 in ./.local/lib/python3.8/site-packages (from -r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/requirements.txt (line 7)) (1.0.0)
Requirement already satisfied: babel==2.7.0 in ./.local/lib/python3.8/site-packages (from -r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/requirements.txt (line 8)) (2.7.0)
Requirement already satisfied: beaker==1.11.0 in ./.local/lib/python3.8/site-packages (from -r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/requirements.txt (line 9)) (1.11.0)
Requirement already satisfied: bleach==3.1.4 in ./.local/lib/python3.8/site-packages (from -r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/requirements.txt (line 10)) (3.1.4)
Requirement already satisfied: certifi==2021.5.30 in ./.local/lib/python3.8/site-packages (from -r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/requirements.txt (line 11)) (2021.5.30)
Requirement already satisfied: chardet==4.0.0 in ./.local/lib/python3.8/site-packages (from -r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/requirements.txt (line 12)) (4.0.0)
Requirement already satisfied: click==7.1.2 in ./.local/lib/python3.8/site-packages (from -r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/requirements.txt (line 13)) (7.1.2)
Requirement already satisfied: dominate==2.4.0 in ./.local/lib/python3.8/site-packages (from -r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/requirements.txt (line 14)) (2.4.0)
Requirement already satisfied: fanstatic==1.1 in ./.local/lib/python3.8/site-packages (from -r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/requirements.txt (line 15)) (1.1)
Requirement already satisfied: feedgen==0.9.0 in ./.local/lib/python3.8/site-packages (from -r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/requirements.txt (line 16)) (0.9.0)
Requirement already satisfied: flask-babel==1.0.0 in ./.local/lib/python3.8/site-packages (from -r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/requirements.txt (line 17)) (1.0.0)
Requirement already satisfied: flask-multistatic==1.0 in ./.local/lib/python3.8/site-packages (from -r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/requirements.txt (line 18)) (1.0)
Requirement already satisfied: flask==1.1.1 in ./.local/lib/python3.8/site-packages (from -r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/requirements.txt (line 19)) (1.1.1)
Requirement already satisfied: funcsigs==1.0.2 in ./.local/lib/python3.8/site-packages (from -r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/requirements.txt (line 20)) (1.0.2)
Requirement already satisfied: idna==2.10 in ./.local/lib/python3.8/site-packages (from -r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/requirements.txt (line 21)) (2.10)
Requirement already satisfied: itsdangerous==1.1.0 in ./.local/lib/python3.8/site-packages (from -r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/requirements.txt (line 22)) (1.1.0)
Requirement already satisfied: jinja2==2.10.1 in /usr/lib/python3/dist-packages (from -r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/requirements.txt (line 23)) (2.10.1)
Requirement already satisfied: lxml==4.6.3 in ./.local/lib/python3.8/site-packages (from -r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/requirements.txt (line 24)) (4.6.3)
Requirement already satisfied: mako==1.1.5 in ./.local/lib/python3.8/site-packages (from -r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/requirements.txt (line 25)) (1.1.5)
Requirement already satisfied: markdown==2.6.7 in ./.local/lib/python3.8/site-packages (from -r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/requirements.txt (line 26)) (2.6.7)
Requirement already satisfied: markupsafe==1.1.1 in ./.local/lib/python3.8/site-packages (from -r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/requirements.txt (line 27)) (1.1.1)
Requirement already satisfied: nose==1.3.7 in ./.local/lib/python3.8/site-packages (from -r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/requirements.txt (line 28)) (1.3.7)
Requirement already satisfied: passlib==1.6.5 in ./.local/lib/python3.8/site-packages (from -r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/requirements.txt (line 29)) (1.6.5)
Requirement already satisfied: polib==1.0.7 in ./.local/lib/python3.8/site-packages (from -r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/requirements.txt (line 30)) (1.0.7)
Collecting psycopg2==2.8.2
  Using cached psycopg2-2.8.2.tar.gz (368 kB)
  Preparing metadata (setup.py) ... done
Requirement already satisfied: pyjwt==1.7.1 in /usr/lib/python3/dist-packages (from -r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/requirements.txt (line 32)) (1.7.1)
Collecting pysolr==3.6.0
  Using cached pysolr-3.6.0-py2.py3-none-any.whl (18 kB)
Requirement already satisfied: python-dateutil==2.8.2 in ./.local/lib/python3.8/site-packages (from -r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/requirements.txt (line 34)) (2.8.2)
Requirement already satisfied: python-editor==1.0.4 in ./.local/lib/python3.8/site-packages (from -r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/requirements.txt (line 35)) (1.0.4)
Collecting python-magic==0.4.15
  Using cached python_magic-0.4.15-py2.py3-none-any.whl (5.5 kB)
Requirement already satisfied: pytz==2016.7 in ./.local/lib/python3.8/site-packages (from -r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/requirements.txt (line 37)) (2016.7)
Collecting pyutilib==5.7.1
  Using cached PyUtilib-5.7.1-py2.py3-none-any.whl (251 kB)
Collecting pyyaml==5.4.1
  Using cached PyYAML-5.4.1-cp38-cp38-manylinux1_x86_64.whl (662 kB)
Collecting redis==3.5.3
  Using cached redis-3.5.3-py2.py3-none-any.whl (72 kB)
Collecting repoze.lru==0.7
  Using cached repoze.lru-0.7-py3-none-any.whl (10 kB)
Collecting repoze.who==2.3
  Using cached repoze.who-2.3-py3-none-any.whl (75 kB)
Collecting requests==2.25.1
  Using cached requests-2.25.1-py2.py3-none-any.whl (61 kB)
Collecting routes==1.13
  Using cached Routes-1.13-py3-none-any.whl
Collecting rq==1.0
  Using cached rq-1.0-py2.py3-none-any.whl
Requirement already satisfied: shutilwhich==1.1.0 in ./.local/lib/python3.8/site-packages (from -r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/requirements.txt (line 46)) (1.1.0)
Collecting simplejson==3.10.0
  Using cached simplejson-3.10.0-cp38-cp38-linux_x86_64.whl
Requirement already satisfied: six==1.16.0 in ./.local/lib/python3.8/site-packages (from -r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/requirements.txt (line 48)) (1.16.0)
Requirement already satisfied: sqlalchemy==1.3.5 in ./.local/lib/python3.8/site-packages (from -r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/requirements.txt (line 49)) (1.3.5)
Collecting sqlparse==0.2.2
  Using cached sqlparse-0.2.2-py2.py3-none-any.whl (38 kB)
Collecting tzlocal==1.3
  Using cached tzlocal-1.3-py3-none-any.whl
Collecting unicodecsv==0.14.1
  Using cached unicodecsv-0.14.1-py3-none-any.whl
Collecting urllib3==1.26.6
  Using cached urllib3-1.26.6-py2.py3-none-any.whl (138 kB)
Requirement already satisfied: watchdog==2.1.5 in ./.local/lib/python3.8/site-packages (from -r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/requirements.txt (line 54)) (2.1.5)
Collecting webassets==0.12.1
  Using cached webassets-0.12.1-py3-none-any.whl
Requirement already satisfied: webencodings==0.5.1 in ./.local/lib/python3.8/site-packages (from -r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/requirements.txt (line 56)) (0.5.1)
Requirement already satisfied: webob==1.8.7 in ./.local/lib/python3.8/site-packages (from -r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/requirements.txt (line 57)) (1.8.7)
Requirement already satisfied: werkzeug[watchdog]==1.0.0 in ./.local/lib/python3.8/site-packages (from -r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/requirements.txt (line 58)) (1.0.0)
Collecting zope.interface==4.3.2
  Using cached zope.interface-4.3.2-cp38-cp38-linux_x86_64.whl
Requirement already satisfied: setuptools in ./.local/lib/python3.8/site-packages (from fanstatic==1.1->-r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/requirements.txt (line 15)) (44.1.0)
Building wheels for collected packages: psycopg2
  Building wheel for psycopg2 (setup.py) ... done
  Created wheel for psycopg2: filename=psycopg2-2.8.2-cp38-cp38-linux_x86_64.whl size=500936 sha256=fb871b38b59dd5f37c6beb40a9bd8847603c03eb89735a749e549b6fc0331f6b
  Stored in directory: /home/{project}/.cache/pip/wheels/97/1c/85/b89f26dc502f8822a3c6f7f62264343979e0f6f2280eb753b4
Successfully built psycopg2
Installing collected packages: webassets, unicodecsv, sqlparse, simplejson, repoze.lru, python-magic, zope.interface, urllib3, tzlocal, routes, redis, pyyaml, pyutilib, psycopg2, rq, requests, repoze.who, pysolr
Successfully installed psycopg2-2.8.2 pysolr-3.6.0 python-magic-0.4.15 pyutilib-5.7.1 pyyaml-5.4.1 redis-3.5.3 repoze.lru-0.7 repoze.who-2.3 requests-2.25.1 routes-1.13 rq-1.0 simplejson-3.10.0 sqlparse-0.2.2 tzlocal-1.3 unicodecsv-0.14.1 urllib3-1.26.6 webassets-0.12.1 zope.interface-4.3.2

 

Installing dev-requirements.txt

pip install -r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/dev-requirements.txt

Response 

Defaulting to user installation because normal site-packages is not writeable
Collecting beautifulsoup4==4.9.1
  Downloading beautifulsoup4-4.9.1-py3-none-any.whl (115 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 115.1/115.1 kB 3.5 MB/s eta 0:00:00
Collecting coveralls
  Downloading coveralls-3.3.1-py2.py3-none-any.whl (14 kB)
Collecting docutils==0.12
  Downloading docutils-0.12-py3-none-any.whl (508 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 508.8/508.8 kB 13.2 MB/s eta 0:00:00
Collecting factory-boy==2.12.0
  Downloading factory_boy-2.12.0-py2.py3-none-any.whl (36 kB)
Collecting Flask-DebugToolbar==0.11.0
  Downloading Flask_DebugToolbar-0.11.0-py2.py3-none-any.whl (325 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 325.0/325.0 kB 24.4 MB/s eta 0:00:00
Collecting freezegun==0.3.15
  Downloading freezegun-0.3.15-py2.py3-none-any.whl (14 kB)
Collecting ipdb==0.13.2
  Downloading ipdb-0.13.2.tar.gz (14 kB)
  Preparing metadata (setup.py) ... done
Collecting responses==0.10.14
  Downloading responses-0.10.14-py2.py3-none-any.whl (15 kB)
Collecting mock==2.0.0
  Downloading mock-2.0.0-py2.py3-none-any.whl (56 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 56.8/56.8 kB 2.9 MB/s eta 0:00:00
Collecting pycodestyle==2.5.0
  Downloading pycodestyle-2.5.0-py2.py3-none-any.whl (51 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 51.2/51.2 kB 5.4 MB/s eta 0:00:00
Collecting pip-tools==5.1.2
  Downloading pip_tools-5.1.2-py2.py3-none-any.whl (43 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 44.0/44.0 kB 5.1 MB/s eta 0:00:00
Collecting pyfakefs==3.2
  Downloading pyfakefs-3.2-py2.py3-none-any.whl (58 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 58.7/58.7 kB 204.9 kB/s eta 0:00:00
Collecting Sphinx==1.8.5
  Downloading Sphinx-1.8.5-py2.py3-none-any.whl (3.1 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.1/3.1 MB 47.7 MB/s eta 0:00:00
Collecting sphinx-rtd-theme==0.4.3
  Downloading sphinx_rtd_theme-0.4.3-py2.py3-none-any.whl (6.4 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.4/6.4 MB 62.1 MB/s eta 0:00:00
Collecting cookiecutter==1.7.0
  Downloading cookiecutter-1.7.0-py2.py3-none-any.whl (40 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 40.5/40.5 kB 4.8 MB/s eta 0:00:00
Collecting pytest==4.6.5
  Downloading pytest-4.6.5-py2.py3-none-any.whl (230 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 230.1/230.1 kB 16.3 MB/s eta 0:00:00
Collecting pytest-split-tests==1.0.9
  Downloading pytest_split_tests-1.0.9-py2.py3-none-any.whl (3.9 kB)
Collecting pytest-cov==2.7.1
  Downloading pytest_cov-2.7.1-py2.py3-none-any.whl (17 kB)
Collecting pytest-freezegun==0.4.1
  Downloading pytest_freezegun-0.4.1-py2.py3-none-any.whl (4.6 kB)
Collecting pytest-rerunfailures==8.0
  Downloading pytest_rerunfailures-8.0-py2.py3-none-any.whl (11 kB)
Collecting towncrier==19.2.0
  Downloading towncrier-19.2.0-py2.py3-none-any.whl (20 kB)
Collecting soupsieve>1.2
  Downloading soupsieve-2.3.2.post1-py3-none-any.whl (37 kB)
Collecting Faker>=0.7.0
  Downloading Faker-14.1.0-py3-none-any.whl (1.6 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.6/1.6 MB 42.4 MB/s eta 0:00:00
Requirement already satisfied: Flask>=0.8 in ./.local/lib/python3.8/site-packages (from Flask-DebugToolbar==0.11.0->-r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/dev-requirements.txt (line 7)) (1.1.1)
Requirement already satisfied: Blinker in /usr/lib/python3/dist-packages (from Flask-DebugToolbar==0.11.0->-r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/dev-requirements.txt (line 7)) (1.4)
Requirement already satisfied: itsdangerous in ./.local/lib/python3.8/site-packages (from Flask-DebugToolbar==0.11.0->-r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/dev-requirements.txt (line 7)) (1.1.0)
Requirement already satisfied: werkzeug in ./.local/lib/python3.8/site-packages (from Flask-DebugToolbar==0.11.0->-r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/dev-requirements.txt (line 7)) (1.0.0)
Requirement already satisfied: six in ./.local/lib/python3.8/site-packages (from freezegun==0.3.15->-r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/dev-requirements.txt (line 8)) (1.16.0)
Requirement already satisfied: python-dateutil!=2.0,>=1.0 in ./.local/lib/python3.8/site-packages (from freezegun==0.3.15->-r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/dev-requirements.txt (line 8)) (2.8.2)
Requirement already satisfied: setuptools in ./.local/lib/python3.8/site-packages (from ipdb==0.13.2->-r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/dev-requirements.txt (line 9)) (44.1.0)
Collecting ipython>=5.1.0
  Downloading ipython-8.4.0-py3-none-any.whl (750 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 750.8/750.8 kB 32.8 MB/s eta 0:00:00
Requirement already satisfied: requests>=2.0 in ./.local/lib/python3.8/site-packages (from responses==0.10.14->-r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/dev-requirements.txt (line 10)) (2.25.1)
Requirement already satisfied: pbr>=0.11 in /usr/lib/python3/dist-packages (from mock==2.0.0->-r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/dev-requirements.txt (line 11)) (5.4.5)
Requirement already satisfied: click>=7 in ./.local/lib/python3.8/site-packages (from pip-tools==5.1.2->-r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/dev-requirements.txt (line 13)) (7.1.2)
Requirement already satisfied: pip>=20.0 in ./.local/lib/python3.8/site-packages (from pip-tools==5.1.2->-r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/dev-requirements.txt (line 13)) (22.2.2)
Collecting snowballstemmer>=1.1
  Downloading snowballstemmer-2.2.0-py2.py3-none-any.whl (93 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 93.0/93.0 kB 7.4 MB/s eta 0:00:00
Requirement already satisfied: Jinja2>=2.3 in /usr/lib/python3/dist-packages (from Sphinx==1.8.5->-r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/dev-requirements.txt (line 15)) (2.10.1)
Collecting imagesize
  Downloading imagesize-1.4.1-py2.py3-none-any.whl (8.8 kB)
Collecting sphinxcontrib-websupport
  Downloading sphinxcontrib_websupport-1.2.4-py2.py3-none-any.whl (39 kB)
Collecting Pygments>=2.0
  Downloading Pygments-2.13.0-py3-none-any.whl (1.1 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.1/1.1 MB 37.0 MB/s eta 0:00:00
Collecting alabaster<0.8,>=0.7
  Downloading alabaster-0.7.12-py2.py3-none-any.whl (14 kB)
Collecting packaging
  Downloading packaging-21.3-py3-none-any.whl (40 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 40.8/40.8 kB 4.6 MB/s eta 0:00:00
Requirement already satisfied: babel!=2.0,>=1.3 in ./.local/lib/python3.8/site-packages (from Sphinx==1.8.5->-r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/dev-requirements.txt (line 15)) (2.7.0)
Collecting jinja2-time>=0.1.0
  Downloading jinja2_time-0.2.0-py2.py3-none-any.whl (6.4 kB)
Collecting binaryornot>=0.2.0
  Downloading binaryornot-0.4.4-py2.py3-none-any.whl (9.0 kB)
Collecting future>=0.15.2
  Downloading future-0.18.2.tar.gz (829 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 829.2/829.2 kB 31.5 MB/s eta 0:00:00
  Preparing metadata (setup.py) ... done
Collecting whichcraft>=0.4.0
  Downloading whichcraft-0.6.1-py2.py3-none-any.whl (5.2 kB)
Collecting poyo>=0.1.0
  Downloading poyo-0.5.0-py2.py3-none-any.whl (10 kB)
Collecting pluggy<1.0,>=0.12
  Downloading pluggy-0.13.1-py2.py3-none-any.whl (18 kB)
Requirement already satisfied: attrs>=17.4.0 in /usr/lib/python3/dist-packages (from pytest==4.6.5->-r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/dev-requirements.txt (line 19)) (19.3.0)
Collecting atomicwrites>=1.0
  Downloading atomicwrites-1.4.1.tar.gz (14 kB)
  Preparing metadata (setup.py) ... done
Requirement already satisfied: importlib-metadata>=0.12 in /usr/lib/python3/dist-packages (from pytest==4.6.5->-r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/dev-requirements.txt (line 19)) (1.5.0)
Collecting wcwidth
  Downloading wcwidth-0.2.5-py2.py3-none-any.whl (30 kB)
Requirement already satisfied: more-itertools>=4.0.0 in /usr/lib/python3/dist-packages (from pytest==4.6.5->-r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/dev-requirements.txt (line 19)) (4.2.0)
Collecting py>=1.5.0
  Downloading py-1.11.0-py2.py3-none-any.whl (98 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 98.7/98.7 kB 11.0 MB/s eta 0:00:00
Collecting coverage>=4.4
  Downloading coverage-6.4.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (213 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 213.6/213.6 kB 18.8 MB/s eta 0:00:00
Collecting toml
  Downloading toml-0.10.2-py2.py3-none-any.whl (16 kB)
Requirement already satisfied: incremental in /usr/lib/python3/dist-packages (from towncrier==19.2.0->-r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/dev-requirements.txt (line 24)) (16.10.1)
Collecting docopt>=0.6.1
  Downloading docopt-0.6.2.tar.gz (25 kB)
  Preparing metadata (setup.py) ... done
Requirement already satisfied: pytz>=2015.7 in ./.local/lib/python3.8/site-packages (from babel!=2.0,>=1.3->Sphinx==1.8.5->-r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/dev-requirements.txt (line 15)) (2016.7)
Requirement already satisfied: chardet>=3.0.2 in ./.local/lib/python3.8/site-packages (from binaryornot>=0.2.0->cookiecutter==1.7.0->-r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/dev-requirements.txt (line 17)) (4.0.0)
Collecting jedi>=0.16
  Downloading jedi-0.18.1-py2.py3-none-any.whl (1.6 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.6/1.6 MB 42.6 MB/s eta 0:00:00
Collecting matplotlib-inline
  Downloading matplotlib_inline-0.1.6-py3-none-any.whl (9.4 kB)
Collecting backcall
  Downloading backcall-0.2.0-py2.py3-none-any.whl (11 kB)
Collecting decorator
  Downloading decorator-5.1.1-py3-none-any.whl (9.1 kB)
Collecting prompt-toolkit!=3.0.0,!=3.0.1,<3.1.0,>=2.0.0
  Downloading prompt_toolkit-3.0.30-py3-none-any.whl (381 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 381.7/381.7 kB 26.9 MB/s eta 0:00:00
Requirement already satisfied: pexpect>4.3 in /usr/lib/python3/dist-packages (from ipython>=5.1.0->ipdb==0.13.2->-r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/dev-requirements.txt (line 9)) (4.6.0)
Collecting traitlets>=5
  Downloading traitlets-5.3.0-py3-none-any.whl (106 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 106.8/106.8 kB 10.9 MB/s eta 0:00:00
Collecting stack-data
  Downloading stack_data-0.4.0-py3-none-any.whl (23 kB)
Collecting pickleshare
  Downloading pickleshare-0.7.5-py2.py3-none-any.whl (6.9 kB)
Collecting arrow
  Downloading arrow-1.2.2-py3-none-any.whl (64 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 64.0/64.0 kB 5.6 MB/s eta 0:00:00
Requirement already satisfied: idna<3,>=2.5 in ./.local/lib/python3.8/site-packages (from requests>=2.0->responses==0.10.14->-r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/dev-requirements.txt (line 10)) (2.10)
Requirement already satisfied: certifi>=2017.4.17 in ./.local/lib/python3.8/site-packages (from requests>=2.0->responses==0.10.14->-r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/dev-requirements.txt (line 10)) (2021.5.30)
Requirement already satisfied: urllib3<1.27,>=1.21.1 in ./.local/lib/python3.8/site-packages (from requests>=2.0->responses==0.10.14->-r https://raw.githubusercontent.com/ckan/ckan/ckan-2.9.5/dev-requirements.txt (line 10)) (1.26.6)
Collecting pyparsing!=3.0.5,>=2.0.2
  Downloading pyparsing-3.0.9-py3-none-any.whl (98 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 98.3/98.3 kB 10.4 MB/s eta 0:00:00
Collecting sphinxcontrib-serializinghtml
  Downloading sphinxcontrib_serializinghtml-1.1.5-py2.py3-none-any.whl (94 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 94.0/94.0 kB 10.2 MB/s eta 0:00:00
Collecting parso<0.9.0,>=0.8.0
  Downloading parso-0.8.3-py2.py3-none-any.whl (100 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100.8/100.8 kB 10.7 MB/s eta 0:00:00
Collecting pure-eval
  Downloading pure_eval-0.2.2-py3-none-any.whl (11 kB)
Collecting executing
  Downloading executing-0.10.0-py2.py3-none-any.whl (17 kB)
Collecting asttokens
  Downloading asttokens-2.0.8-py2.py3-none-any.whl (23 kB)
Building wheels for collected packages: ipdb, atomicwrites, docopt, future
  Building wheel for ipdb (setup.py) ... done
  Created wheel for ipdb: filename=ipdb-0.13.2-py3-none-any.whl size=10520 sha256=faf64c973270ab663d035fd2792bbf9594b0c2658326115a42a4a7e3dfb57365
  Stored in directory: /home/{project}/.cache/pip/wheels/31/f3/58/accdf45cba573136dff3bc0e8aad1848899255f5fc3266a9fc
  Building wheel for atomicwrites (setup.py) ... done
  Created wheel for atomicwrites: filename=atomicwrites-1.4.1-py2.py3-none-any.whl size=6943 sha256=18fa074d329d867290a69fd691516a5bbd3925b98379cbc8dbe2542f1b506ed5
  Stored in directory: /home/{project}/.cache/pip/wheels/ce/24/c1/56b1ca77dda9577b75eb88d7ec50425f103ec2f6170c6e97df
  Building wheel for docopt (setup.py) ... done
  Created wheel for docopt: filename=docopt-0.6.2-py2.py3-none-any.whl size=13704 sha256=c1273c66cbdd896dd5eabd6e5ac8ccc8e5b38cf70170829c033af31791f0f3c3
  Stored in directory: /home/{project}/.cache/pip/wheels/56/ea/58/ead137b087d9e326852a851351d1debf4ada529b6ac0ec4e8c
  Building wheel for future (setup.py) ... done
  Created wheel for future: filename=future-0.18.2-py3-none-any.whl size=491058 sha256=acfe531b2e9d87ccf5fe1bd7a79112ccde1fa68a3a2606a97e410c386e387779
  Stored in directory: /home/{project}/.cache/pip/wheels/8e/70/28/3d6ccd6e315f65f245da085482a2e1c7d14b90b30f239e2cf4
Successfully built ipdb atomicwrites docopt future
Installing collected packages: whichcraft, wcwidth, snowballstemmer, pyfakefs, pure-eval, pickleshare, executing, docutils, docopt, backcall, alabaster, traitlets, toml, sphinxcontrib-serializinghtml, soupsieve, pyparsing, Pygments, pycodestyle, py, prompt-toolkit, poyo, pluggy, pip-tools, parso, mock, imagesize, future, decorator, coverage, binaryornot, atomicwrites, asttokens, towncrier, stack-data, sphinxcontrib-websupport, responses, packaging, matplotlib-inline, jedi, freezegun, Flask-DebugToolbar, Faker, coveralls, beautifulsoup4, arrow, Sphinx, pytest, jinja2-time, ipython, factory-boy, sphinx-rtd-theme, pytest-split-tests, pytest-rerunfailures, pytest-freezegun, pytest-cov, ipdb, cookiecutter
Successfully installed Faker-14.1.0 Flask-DebugToolbar-0.11.0 Pygments-2.13.0 Sphinx-1.8.5 alabaster-0.7.12 arrow-1.2.2 asttokens-2.0.8 atomicwrites-1.4.1 backcall-0.2.0 beautifulsoup4-4.9.1 binaryornot-0.4.4 cookiecutter-1.7.0 coverage-6.4.4 coveralls-3.3.1 decorator-5.1.1 docopt-0.6.2 docutils-0.12 executing-0.10.0 factory-boy-2.12.0 freezegun-0.3.15 future-0.18.2 imagesize-1.4.1 ipdb-0.13.2 ipython-8.4.0 jedi-0.18.1 jinja2-time-0.2.0 matplotlib-inline-0.1.6 mock-2.0.0 packaging-21.3 parso-0.8.3 pickleshare-0.7.5 pip-tools-5.1.2 pluggy-0.13.1 poyo-0.5.0 prompt-toolkit-3.0.30 pure-eval-0.2.2 py-1.11.0 pycodestyle-2.5.0 pyfakefs-3.2 pyparsing-3.0.9 pytest-4.6.5 pytest-cov-2.7.1 pytest-freezegun-0.4.1 pytest-rerunfailures-8.0 pytest-split-tests-1.0.9 responses-0.10.14 snowballstemmer-2.2.0 soupsieve-2.3.2.post1 sphinx-rtd-theme-0.4.3 sphinxcontrib-serializinghtml-1.1.5 sphinxcontrib-websupport-1.2.4 stack-data-0.4.0 toml-0.10.2 towncrier-19.2.0 traitlets-5.3.0 wcwidth-0.2.5 whichcraft-0.6.1

 

Related articles

Andrew Fletcher29 Sep 2023
Installing CKAN from package on Ubuntu 20.04
&nbsp;Install the CKAN packageBegin by cleaning up your server environment. &nbsp;Do this by updating Ubuntu’s package index:sudo apt updateNow you can install the packages that CKAN requires (including ‘git’, which will allow you to install CKAN extensions):sudo apt install -y libpq5 redis-server...
Andrew Fletcher29 Sep 2023
Installing CKAN from source on Ubuntu 20.04
If you're planning to create extensions, generating CKAN from source is the preferred option. &nbsp;However, even if you have installed from package, you can make adjustments to creating extensions.&nbsp;Set up your serverBegin by cleaning up your server environment. &nbsp;Do this by updating...