How to install my own python module (package) via conda and watch its changes

I have a file mysql.py, which I use in almost all of my projects. Since I do not want to copy and paste the same file into each of these projects I wrote a module - possibly a package in the future.

Question

How do I add a local module to my conda environment, and automatically update or watch it when I change something in mysql.py? How to do the same for a package?

I would like to avoid to set up a local channel/repository and just reference to the folder with mysql.py.


Solution 1:

If you install the conda build package (and you have a package, not just a script), you can install in "editable" mode:

conda develop .

(running from the directory with your script). This is very similar to the "editable" mode from pip

pip install -e .

Either approach lets you uninstall packages with either

conda develop -u .

or

pip uninstall .

If you just have a script (not a package), you can edit or set the PYTHONPATH environment variable to include the directory with the script.

Solution 2:

While the previous answers are doing what I need, I just want to show what I will be using instead. Since it was my plan to learn about conda packages anyway...

0. Good sources

  1. Michael Sarahan - Making packages and packaging "just work" | YouTube
  2. GitHub - audreyr/cookiecutter: A command-line utility that creates projects from cookiecutters (project templates) and use one of these templates:
    • GitHub - audreyr/cookiecutter-pypackage: Cookiecutter template for a Python package.
    • GitHub - conda/cookiecutter-conda-python: A cookiecutter template for conda packages using Python (This is what I used)

1. Create a python package template for conda using cookiecutter

conda install -c conda-forge cookiecutter

Now change to the directory where you want to initialize your package, then do:

cookiecutter https://github.com/conda/cookiecutter-conda-python.git

This will ask for some basic information about the package that you want to create. Then change into your repo

cd myrepo

2. Build your package

make sure conda-build is installed, if not run

conda install conda-build

Make sure to set the CONDA_BLD_PATH as mentioned in anaconda - using a different conda-build root directory - Stack Overflow. This will be the directory where you can find your packages, then run:

conda build conda.recipe

to build your package and clean up after you with

conda build purge

3. Set up your own local channel (no uploading to anaconda.org)

Read

  • Creating custom channels — Conda documentation
  • python - add local channel to .condarc on windows - Stack Overflow

for help.

Index each platform. Maybe someone can confirm that this step is not needed, as my builds already contain the repodata.json. Otherwise:

conda index D:\CODE\condamychannel\win-64

Test if the package can be found with

conda search -c file:///D:\CODE\condamychannel --override-channels mypackage

or add the channel to the config directly (per environment)

conda config --add channels file:///D:\CODE\condamychannel

4. Install (and update) the package

activate myenv

and

conda install mypackage

Once I change mypackage, I give it a new version number in meta.yaml and setup.py and build the package with conda build conda.recipe. Updating is simply

conda update mypackage

See if your package works:

python
>>> import cli from mypackage
>>> cli.cli()
CLI template

This may not be the optimal way, but I could not find a tutorial that contains all the steps I outlined above.