Как установить собственный модуль (пакет) Python через conda и смотреть его изменения

У меня есть файл mysql.py, который я использую почти во всех своих проектах. Поскольку я не хочу копировать и вставлять один и тот же файл в каждый из этих проектов, я написал модуль - возможно, пакет в будущем.

Вопрос

Как добавить локальный модуль в среду conda и автоматически обновлять или просматривать его, когда я что-то меняю в mysql.py? Как сделать то же самое для пакета?

Я бы не хотел создавать локальный канал / репозиторий и просто ссылаться на папку с mysql.py.


person Michael    schedule 25.03.2018    source источник
comment
вы пробовали conda develop или pip -e?   -  person Charlie Parker    schedule 20.01.2020


Ответы (3)


Хотя предыдущие ответы делают то, что мне нужно, я просто хочу показать, что я буду использовать вместо этого. Поскольку в моих планах все равно было узнать о пакетах conda ...

0. Хорошие источники

  1. Майкл Сарахан - Пакеты и упаковка «просто работают» | YouTube
  2. GitHub - audreyr/cookiecutter: A command-line utility that creates projects from cookiecutters (project templates) and use one of these templates:

1. Создайте шаблон пакета python для conda с помощью cookiecutter.

conda install -c conda-forge cookiecutter

Теперь перейдите в каталог, в котором вы хотите инициализировать свой пакет, затем выполните:

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

Это запросит некоторую базовую информацию о пакете, который вы хотите создать. Затем перейдите в свое репо

cd myrepo

2. Создайте свой пакет

убедитесь, что conda-build установлен, если не запускается

conda install conda-build

Обязательно установите CONDA_BLD_PATH, как указано в anaconda - используя другой корневой каталог conda-build - Stack Overflow. Это будет каталог, в котором вы можете найти свои пакеты, затем запустите:

conda build conda.recipe

для сборки вашего пакета и очистки после вас с помощью

conda build purge

3. Настройте свой собственный локальный канал (загрузка на anaconda.org запрещена).

Читать

за помощью.

Проиндексируйте каждую платформу. Может быть, кто-нибудь подтвердит, что этот шаг не нужен, так как мои сборки уже содержат repodata.json. Иначе:

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

Проверьте, можно ли найти пакет с помощью

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

или добавьте канал в конфигурацию напрямую (для каждой среды)

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

4. Установите (и обновите) пакет.

activate myenv

а также

conda install mypackage

Как только я изменяю mypackage, я даю ему новый номер версии в meta.yaml и setup.py и собираю пакет с conda build conda.recipe. Обновление просто

conda update mypackage

Посмотрите, работает ли ваш пакет:

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

Возможно, это не лучший способ, но я не смог найти учебное пособие, содержащее все шаги, которые я описал выше.

person Michael    schedule 26.03.2018
comment
почему вы решили не использовать conda develop или pip -e? - person Charlie Parker; 20.01.2020
comment
Зачем делать это легким способом, если это можно сделать намного сложнее! - person Peter; 24.06.2021

Если вы устанавливаете пакет сборки conda (и у вас есть пакет, а не только скрипт), вы можете установить его в "редактируемом" режиме:

conda develop .

(запускается из каталога с вашим скриптом). Это очень похоже на "редактируемый" режим из pip

pip install -e .

Любой из подходов позволяет удалять пакеты с помощью

conda develop -u .

or

pip uninstall .

Если у вас есть только сценарий (а не пакет), вы можете отредактировать или установить переменную среды PYTHONPATH, чтобы включить каталог со сценарием.

person darthbith    schedule 25.03.2018
comment
как узнать, когда вам pip -e против conda develop? - person Charlie Parker; 20.01.2020
comment
Если вы используете conda, вам следует использовать conda develop. Единственная небольшая проблема, с которой я столкнулся с conda develop, заключалась в том, что он не установил console_scripts, тогда как pip install -e установил бы. Тем не менее, это могло быть исправлено в conda. - person darthbith; 21.01.2020
comment
как вы проверяете, установлено ли что-нибудь? Я пробовал запустить conda list, но ничего знакомого для моего проекта / пакетов не обнаруживается. - person Charlie Parker; 24.01.2020
comment
Он должен появиться в выводе conda list. Правильно ли настроен setup.py файл? pip install -e работает? - person darthbith; 25.01.2020
comment
@CharlieParker См. jakevdp.github.io/blog/ 2016/08/25 / для pip vs conda. - person Michele Piccolini; 29.04.2020
comment
После установки сборки conda использовалась опция разработки conda, но пакет не отображается в списке conda. Он отображается в списке пунктов и отлично импортируется. Я знаю, что список conda показывает несколько другие элементы, чем список pip, но я ожидал, что он покажет мой пакет, как это делает список pip. Кто-нибудь знает, почему этого не происходит? При установке с помощью pip install -e. пакет отображается как в списке пакетов, так и в списке conda - person Mint; 13.10.2020
comment
См. http://evantilton.com/guides/anacondapythonpath/ для получения простого метода программного изменения PYTHONPATH для конкретной среды conda. - person E. Davis; 26.06.2021

У меня была функция-оболочка, которую мне приходилось вызывать несколько раз в разных сценариях, поэтому я скопировал этот файл wrappers.py в папку Anaconda site-packages. На моем компьютере это было по адресу: C: \ ProgramData \ Anaconda3 \ Lib \ site-packages. Затем, когда мне нужно было wrappers.py, я просто импортировал его в свои сценарии, например:

import wrappers

Если вы хотите убедиться, что импорт прошел успешно, вы можете выбрать Anaconda в качестве среды разработки в своей среде IDE, а затем вызвать Intellisense после импорта: from wrappers import (intellisense suggestions). Или вы также можете использовать IDLE:

>>> import wrappers
>>>(if you get this prompt, this means the import was successful).

Интеграция с Conda возможна только в том случае, если вы создаете клиентские каналы . Это связано с тем, что conda ищет пакеты в следующих местах (в зависимости от вашей ОС), и чтобы сообщить conda о необходимости поиска вашего модуля в определенных местах, вы должны установить conda-build для создания настраиваемого канала:

- https://repo.continuum.io/pkgs/main/win-64
- https://repo.continuum.io/pkgs/main/noarch
- https://repo.continuum.io/pkgs/free/win-64
- https://repo.continuum.io/pkgs/free/noarch
- https://repo.continuum.io/pkgs/r/win-64
- https://repo.continuum.io/pkgs/r/noarch
- https://repo.continuum.io/pkgs/pro/win-64
- https://repo.continuum.io/pkgs/pro/noarch
- https://repo.continuum.io/pkgs/msys2/win-64
- https://repo.continuum.io/pkgs/msys2/noarch

Если вы хотите избежать создания репо / канала, то простой импорт, как указано выше, должен сработать. Кроме того, если вы внесете какие-либо изменения в свой модуль и сохраните его, в ваших скриптах всегда будет import последняя версия.

person amanb    schedule 25.03.2018