Calling pip package files from within pip package? (`No module named 'src.snnalgorithms'`)

Question:

Whilst in some_other_package, I am importing files from the snnalgorithms pip package. I received the error:
No module named 'src.snnalgorithms'. This is a valid error because that src.snnalgorithms file does not exist in the some_other_package project from which I was calling the pip package.

As a solution, I can make all the imports in the snn.algorithms pip package, relative to itself. Instead of:

from src.snnalgorithms.population.DUMMY import DUMMY

One could write:

from snnalgorithms.population.DUMMY import DUMMY

However, that implies that each time I want to run the code to briefly verify a minor change, or run the tests after a change, I will have to:

  1. Upload the changes into the pip package.
  2. Re-install the pip package locally to reflect the changes.

This significantly slows down development. Hence I was wondering are there more efficient solutions for this?

Asked By: a.t.

||

Answers:

You can use editable mode for development mode

pip install -e .  # Install package locally 

From pip documentation:

Editable installs allow you to install your project without copying any files. Instead, the files in the development directory are added to Python’s import path. This approach is well suited for development and is also known as a “development installation”.

With an editable install, you only need to perform a re-installation if you change the project metadata (eg: version, what scripts need to be generated etc). You will still need to run build commands when you need to perform a compilation for non-Python code in the project (eg: C extensions).

Example

If you have project: some_other_package from which you call pip package snnalgorithms you can:

cd snnalgorithms
pip install -e .
cd ..
cd some_other_package
python -m src.some_other_package

Assuming you use the same conda environment for both packages, both packages will then be able to use your newest changes that have not even been published to pypi.org yet.

Answered By: haccks
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.