[ PROMPT_NODE_26490 ]
app-development
[ SKILL_DOCUMENTATION ]
# DNAnexus 应用开发
## 概述
应用(Apps)和小程序(Applets)是在 DNAnexus 平台上运行的可执行程序。它们可以用 Python 或 Bash 编写,并随所有必要的依赖项和配置一起部署。
## 小程序 vs 应用
- **小程序 (Applets)**: 存在于项目内部的数据对象。适合开发和测试。
- **应用 (Apps)**: 版本化、可共享的可执行程序,不驻留在项目内部。可以发布供他人使用。
两者在最终构建步骤之前创建方式相同。小程序以后可以转换为应用。
## 创建应用/小程序
### 使用 dx-app-wizard
生成骨架应用目录结构:
bash
dx-app-wizard
这将创建:
- `dxapp.json` - 配置文件
- `src/` - 源代码目录
- `resources/` - 打包的依赖项
- `test/` - 测试文件
### 构建与部署
构建小程序:
bash
dx build
构建应用:
bash
dx build --app
构建过程:
1. 验证 dxapp.json 配置
2. 打包源代码和资源
3. 部署到平台
4. 返回小程序/应用 ID
## 应用目录结构
my-app/
├── dxapp.json # 元数据和配置
├── src/
│ └── my-app.py # 主可执行文件 (Python)
│ └── my-app.sh # 或 Bash 脚本
├── resources/ # 打包的文件和依赖项
│ └── tools/
│ └── data/
└── test/ # 测试数据和脚本
└── test.json
## Python 应用结构
### 入口点
Python 应用使用 `@dxpy.entry_point()` 装饰器来定义函数:
python
import dxpy
@dxpy.entry_point('main')
def main(input1, input2):
# 处理输入
# 返回输出
return {
"output1": result1,
"output2": result2
}
dxpy.run()
### 输入/输出处理
**输入**: DNAnexus 数据对象表示为包含链接的字典:
python
@dxpy.entry_point('main')
def main(reads_file):
# 将链接转换为处理器
reads_dxfile = dxpy.DXFile(reads_file)
# 下载到本地文件系统
dxpy.download_dxfile(reads_dxfile.get_id(), "reads.fastq")
# 处理文件...
**输出**: 直接返回原始类型,将文件输出转换为链接:
python
# 上传结果文件
output_file = dxpy.upload_local_file("output.fastq")
return {
"trimmed_reads": dxpy.dxlink(output_file)
}
## Bash 应用结构
Bash 应用使用更简单的 shell 脚本方法:
bash
#!/bin/bash
set -e -x -o pipefail
main() {
# 下载在