python - 如何创建 Conda 包/应用程序的入口点?

标签 python anaconda conda

我正在开发一个 Python 应用程序,并使用 Conda 来分发它并管理依赖项。

我已成功运行 conda-build 将我的代码包装到 .tar.bz2 文件中。我创建了一个新的 conda 环境,并测试了安装包。一切正常,我能够以这种方式运行我的代码。

我想知道的是,我如何构建我的包和/或 Python 代码,以便我可以通过简单地在我的 conda 环境激活的情况下键入来运行我的脚本,而不是导航到我开发代码的文件夹?

例如,在这个 conda 备忘单中:https://conda.io/docs/_downloads/conda-cheatsheet.pdf ,从顶部开始的第四行,“安装后运行包,例如 Spyder”,运行的命令就是“spyder”。

我的 Python 程序是从单个 .py 文件 launch.py​​ 启动的,但是如何让 conda 知道要调用哪个脚本?当我现在这样做时,它只是说“找不到命令”。

元数据规范中的这一部分似乎是相关的:https://conda.io/docs/user-guide/tasks/build-packages/define-metadata.html#entry-point

我尝试在我的 meta.yaml 中将其设置为“entry: python launch.py​​”,重新构建并重新安装,但这不起作用,我不知道从这里去哪里。

任何帮助将不胜感激,谢谢。

编辑:经过更多挖掘,我可能找到了答案,看来我想创建一个入口点,如下所述:https://setuptools.readthedocs.io/en/latest/setuptools.html#dynamic-discovery-of-services-and-plugins尽管如此,仍然试图将它们放在一起。

最佳答案

假设您的包结构类似于

my_package/
├── my_package/
│   ├── __init__.py
|   ├── __main__.py
├── conda.recipe/
│   ├── meta.yaml
├── setup.py
meta.yaml 中的 conda 配方不需要进入 conda.recipe文件夹,如果您想将配方与其余代码一起存储,这会很方便。现在,在 __main__.py ,您有一些要调用的代码(此代码可以在任何模块中,__main__.py 恰好是一个方便的示例,因为如果您运行其中的代码也会执行 python -m my_package )。 __main__.py中的代码可能就像
import sys
# Import whatever else from your package or otherwise to run the code

def main(argv):
    # Process command line arguments, etc

if __name__ == '__main__':
    sys.exit(main())

现在,在您的 meta.yaml ,你会有类似的东西:
package:
  name: my_package
  version: '1.0.0'

source:
  path: ..

build:
  number: 0
  script: python setup.py install --single-version-externally-managed --record=record.txt
  entry_points:
    - my_package_script = my_package.__main__:main

requirements:
  - ...

关键行是my_package_script = my_package.__main__:main .这里的语法与 setup.py 相同。入口点:
script name = package name.module name:function name

因此,在我们的示例中,我们使用 main来自 __main__.py 的函数my_package 中的模块包裹。

有关完整示例,您可以在此处查看我的包:https://github.com/bryanwweber/CanSen

关于python - 如何创建 Conda 包/应用程序的入口点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50106303/

相关文章:

python - 无法在 Ubuntu 中安装 Pytorch

python - anaconda环境位置问题

python - 如何解决 Fenics 示例 ft06_elasticity.py 中名称 'nabla_div' 未定义错误?

python - 使用 Paramiko 设置 SSH 隧道以访问 PostgreSQL

python - 嵌套字典替换以前的值+键而不是追加

python - 使用 ctypes 模块访问用 C 编写的 DLL 时出错

virtualenv - 如何为 conda create 指定新环境位置

python - 如何使用线性回归在Python中预测Na

anaconda - 如何解决 Anaconda 和 Conda 更新 NoBaseEnvironmentError?

python - 在 2D numpy 数组中找到给定角度的最近项目