Skip to content

Latest commit

 

History

History
83 lines (58 loc) · 2.92 KB

managing_python_path.rst

File metadata and controls

83 lines (58 loc) · 2.92 KB

Managing the Python path

pytest needs to be able to import the code in your project. Normally, when interacting with Django code, the interaction happens via manage.py, which will implicilty add that directory to the Python path.

However, when Python is started via the pytest command, some extra care is needed to have the Python path setup properly. There are two ways to handle this problem, described below.

Automatic looking for of Django projects

By default, pytest-django tries to find Django projects by automatically looking for the project's manage.py file and adding its directory to the Python path.

Looking for the manage.py file uses the following algorithm: Beginning at each directory given on the command line (or the current working directory if none is given), the directory itself, its immediate children and its parents are searched, and it will stop when the first file is found.

If you have a custom project setup, have none or multiple manage.py files in your project, the automatic detection may not be correct. See :ref:`managing_the_python_path_explicilty` for more details on how to configure your environment in that case.

Managing the Python path explicitly

First, disable the automatic Django project finder. Add this to pytest.ini, setup.cfg or tox.ini:

[pytest]
django_find_project = false

Next, you need to make sure that your project code is available on the Python path. There are multiple ways to achieve this:

Managing your project with virtualenv, pip and editable mode

The easiest way to have your code available on the Python path when using virtualenv and pip is to have a setup.py file and install your project in editable mode when developing.

If you don't already have a setup.py file, creating a setup.py file with this content will get you started:

import setuptools
setuptools.setup(name='myproj', version='1.0')

This setup.py file is not sufficient to distribute your package to PyPI or more general packaging, but it should help you get started. Please refer to the Python Packaging User Guide for more information on packaging Python applications.`

To install the project afterwards:

pip install --editable .

Your code should then be importable from any Python application. You can also add this directly to your project's requirements.txt file like this:

# requirements.txt
-e .
django>=1.11
pytest-django

Using pytest-pythonpath

You can also use the pytest-pythonpath plugin to explicitly add paths to the Python path.