如何通过 conda 安装我自己的 python 模块(包)并观察它的变化
Posted
技术标签:
【中文标题】如何通过 conda 安装我自己的 python 模块(包)并观察它的变化【英文标题】:How to install my own python module (package) via conda and watch its changes 【发布时间】:2018-09-03 14:25:40 【问题描述】:我有一个文件mysql.py
,我几乎在所有项目中都会用到它。由于我不想将相同的文件复制并粘贴到每个项目中,我编写了一个模块 - 将来可能是一个包。
问题
如何将本地模块添加到我的 conda 环境中,并在我更改 mysql.py
中的某些内容时自动更新或观看它?如何为包做同样的事情?
我想避免设置本地频道/存储库,而只引用带有mysql.py
的文件夹。
【问题讨论】:
你试过conda develop
还是pip -e
?
【参考方案1】:
如果你安装了 conda 构建包(并且你有一个包,而不仅仅是一个脚本),你可以在“可编辑”模式下安装:
conda develop .
(从您的脚本所在的目录运行)。这与 pip 中的“可编辑”模式非常相似
pip install -e .
任何一种方法都可以让您卸载任何一种软件包
conda develop -u .
或
pip uninstall .
如果您只有一个脚本(不是包),您可以编辑或设置PYTHONPATH
环境变量以将目录包含在脚本中。
【讨论】:
你怎么知道pip -e
vs conda develop
?
如果你使用 conda,你应该使用conda develop
。我遇到conda develop
的唯一小问题是它不会安装console_scripts
,而pip install -e
会。不过,这可能已经在 conda 中修复了。
如何检查是否已安装?我尝试运行conda list
,但我的项目/包似乎没有任何熟悉的东西出现。
它应该出现在conda list
的输出中。您是否正确配置了setup.py
文件? pip install -e
有效吗?
请注意,conda develop
没有得到积极维护,并且有人要求弃用或删除它,请参阅github.com/conda/conda-build/issues/4251。所以**2021年不建议使用conda develop
。【参考方案2】:
虽然前面的答案正在做我需要的,但我只想展示我将使用什么。因为无论如何我计划学习 conda 包......
0。良好的来源
-
Michael Sarahan - Making packages and packaging "just work" | YouTube
GitHub - audreyr/cookiecutter: A command-line utility that creates projects from cookiecutters (project templates)
并使用以下模板之一:
GitHub - audreyr/cookiecutter-pypackage: Cookiecutter template for a Python package.
GitHub - conda/cookiecutter-conda-python: A cookiecutter template for conda packages using Python(这是我用的)
1。使用 cookiecutter 为 conda 创建 python 包模板
conda install -c conda-forge cookiecutter
现在切换到要初始化包的目录,然后执行:
cookiecutter https://github.com/conda/cookiecutter-conda-python.git
这将询问您要创建的包的一些基本信息。然后换成你的回购
cd myrepo
2。构建你的包
确保 conda-build
已安装,如果没有运行
conda install conda-build
确保按照anaconda - using a different conda-build root directory - Stack Overflow 中的说明设置CONDA_BLD_PATH
。这将是您可以找到软件包的目录,然后运行:
conda build conda.recipe
构建你的包并在你之后清理
conda build purge
3。设置您自己的本地频道(不上传到 anaconda.org)
阅读
Creating custom channels — Conda documentation python - add local channel to .condarc on windows - Stack Overflow寻求帮助。
索引每个平台。也许有人可以确认不需要这一步,因为我的构建已经包含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
这可能不是最佳方式,但我找不到包含上述所有步骤的教程。
【讨论】:
你为什么选择不使用conda develop
或pip -e
?
如果可以做得这么麻烦,为什么还要用简单的方法呢!
我尝试按照此处的说明进行操作,但它在“cookiecutter github.com/conda/cookiecutter-conda-python.git”处表示未安装 git。我试过 conda install git 但我得到了同样的信息。
我实际上比conda develop
更喜欢这种方法,因为您还可以在环境 YAML 文件等中包含自己的模块。此外,通过这种方式升级到成熟的公共模块也很简单。
附录:在 conda 环境中使用 pip
是可行的,但有很多关于此问题的潜在问题的报告。它似乎适用于新环境,但更新可能会产生不一致。就我个人而言,我尽量避免在 conda 环境中使用 pip。【参考方案3】:
我有一个包装函数,我必须在不同的脚本上多次调用它。所以,我将该文件 wrappers.py
复制到 Anaconda site-packages 文件夹。在我的计算机上,它位于:C:\ProgramData\Anaconda3\Lib\site-packages。然后,每当我需要 wrappers.py
时,我只需将其导入我的脚本中,如下所示:
import wrappers
如果您想确保导入成功,您可以在 IDE 中选择 Anaconda 作为您的开发环境,然后在导入后调用 Intellisense:from wrappers import (intellisense suggestions)
。或者你也可以使用 IDLE:
>>> import wrappers
>>>(if you get this prompt, this means the import was successful).
仅当您创建 custom channels 时,才能进行 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
。
【讨论】:
以上是关于如何通过 conda 安装我自己的 python 模块(包)并观察它的变化的主要内容,如果未能解决你的问题,请参考以下文章