D. *_*Lef 5 python anaconda conda
我正在开发Python应用程序,并使用Conda分发它并管理依赖项。
我已经成功运行conda-build,将我的代码包装到.tar.bz2文件中。我创建了一个新的conda环境,并测试了安装程序包。一切正常,我能够以这种方式运行代码。
我想知道的是,如何构造我的程序包和/或Python代码,这样我可以通过在活动的conda环境中简单键入内容而不是导航到开发代码的文件夹中来运行脚本?
例如,在以下conda速查表中:https ://conda.io/docs/_downloads/conda-cheatsheet.pdf ,从顶部开始的第四行,“在安装后运行软件包,例如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-服务和插件尽管仍在尝试将其整合在一起。
假设您的包装结构类似于
my_package/
??? my_package/
? ??? __init__.py
| ??? __main__.py
??? conda.recipe/
? ??? meta.yaml
??? setup.py
Run Code Online (Sandbox Code Playgroud)
其中的conda配方meta.yaml不需要放在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())
Run Code Online (Sandbox Code Playgroud)
现在,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:
- ...
Run Code Online (Sandbox Code Playgroud)
关键是my_package_script = my_package.__main__:main。此处的语法与setup.py入口点的语法相同:
script name = package name.module name:function name
Run Code Online (Sandbox Code Playgroud)
因此,在我们的示例中,我们使用了包中模块中的main函数。__main__.pymy_package
对于完整的示例,您可以在这里查看我的软件包:https : //github.com/bryanwweber/CanSen
| 归档时间: |
|
| 查看次数: |
1096 次 |
| 最近记录: |