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
- Michael Sarahan - Making packages and packaging "just work" | YouTube
-
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.