Python3的DNanexus平台API绑定

dxpy3的Python项目详细描述


dxpy:dnanexus python api

API Documentation

建筑

从dx toolkit根目录:

make python

调试

在前面将_DX_DEBUG环境变量设置为正整数 运行基于dxpy的程序(例如dx)来显示输入和 每个api调用的输出。支持的值为1、2和3,其中 不断增加的数字连续产生更详细的输出。

示例:

$ _DX_DEBUG=1 dx ls

python编码风格

  • 符合PEP-8
    • 将行长度要求放宽到每行120个字符,这样就可以判断可读性不会受到影响。
    • 如果PEP-8简化了代码或需要遵循约定,请自行放宽其他需求 在dnanexus的其他地方建立。
  • Sphinx Autodoc可用的格式记录代码。
  • 在签入代码之前对代码运行pylint -E
  • 不要引入模块导入时间的副作用。
    • 不要将模块级属性添加到api中,除非您绝对确定它们将保持不变。为了 例如,不要声明属性dxpy.foodxpy._foo可以),或者 任何模块的全局范围。这是因为除非该值是常量,否则可能需要由 初始化方法,它可能需要延迟运行以避免在模块加载时出现副作用。相反,使用 可在调用时执行更新的访问器方法:

      _foo=Nonedefget_foo():initialize()return_foo

其他有用资源:

python版本兼容性

进入python代码库的代码应该使用python 3.3风格编写,并且应该与python3.3、3.4兼容, 和2.7。为了促进python 2的兼容性,我们在https://github.com/dnanexus/dx-toolkit/blob/master/src/python/dxpy/compat.py中有compat模块。另外,下面的样板文件应该是 插入到所有python源文件中:

from __future__ import absolute_import, division, print_function, unicode_literals
  • dxpy.compat有一些简单的填隙片,它们反映了python 3.3的内置代码,当启用python 2.7时,将它们重定向到python2.7的等效版本。最关键的是,from dxpy.compat import str将导入2.7上的unicode内置和3.3上的str内置。使用str无论您在何处使用unicode。要将unicode字符串转换为字节,请使用.encode('utf-8')
  • 使用from __future__ import print_function并使用print作为函数。写print >>sys.stderr,而不是print(..., file=sys.stderr)
  • 字节/unicode转换之后的下一个最麻烦的问题是许多iterables操作符返回python 3中的生成器。例如,map()返回生成器。这会打断期望列表的位置,并要求使用list()进行显式强制转换,或者使用列表理解(通常是首选)。
  • 不要使用raw_input,而是使用from dxpy.compat import input
  • 使用.iteritems(),而不是.items()。如果这是2.7上的性能问题,请在compat.py中引入一个垫片。
  • 不要使用StringIO.StringIO,而是使用from dxpy.compat import BytesIO(这是2.7上的stringio)。
  • 不要使用<iterator>.next(),而是使用next(<iterator>)
  • 不要使用x.has_key(y),而是使用y in x
  • 不要使用sort(x, cmp=lambda x, y: ...),而是使用x=sorted(x, key=lambda x: ...)

其他有用资源:

同时也是模块的python脚本的约定

有些脚本(如格式转换器)既可用作独立的可执行文件,也可用作可导入模块。

对于这些脚本,我们有以下约定:

  • 使用类似于dx_useful_script.py的名称将脚本安装到src/python/dxpy/scripts中。这将允许 使用import dxpy.scripts.dx_useful_script导入。

  • 在脚本中包含一个名为main()的顶级函数,它应该是入口点处理器,并且 用以下小节结束脚本:

    if__name__=='__main__':main()
  • dxpy安装过程(通过setup.py调用,或者通过make -C src python在顶层调用) 将自动找到脚本并将其启动程序安装到可执行路径中。使用 entry_pointssetuptools/distribute的工具。

    • 注:Install脚本将用启动程序名称中的破折号替换模块名称中的下划线 脚本。
  • 通常,在命令行上调用时,main()将首先解析命令行参数(sys.argv)。然而, 当作为模块导入时,需要将参数作为输入传递给函数。以下是 关于如何在只有一个入口点的情况下同时容纳两种样式的建议(main):

    defmain(**kwargs):iflen(kwargs)==0:kwargs=vars(arg_parser.parse_args(sys.argv[1:]))...if__name__=='__main__':main()

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
tomcat Java条带错误   java OPENTSDB fsck修复程序不更正重复点   java JavaFX在控制器内切换自身的可见性   java maven surefire插件未并行执行运行程序   读取导致Freemarker模板引擎中TemplateException的Java对象   无法使Java库与我的Android应用程序一起工作   安卓 java。lang.IllegalStateException游标   使用Java检索XML文件中的XSL URL和名称   java如何从文本文件集合中提取特定值   电子邮件java mail gmail   java为什么finalize()只被垃圾收集器调用一次?   java方法findViewById(int)对于Json类型是未定义的。蛇形   java在安卓中尝试从brother打印机打印位图时遇到以下异常   java在颤振中支持Kotlin的优势   java从后面编写文本   java制作列表。第一个列表可以有相同的数字,第二个将是价格,尝试制作第三个列表,如果它们是相同的数字,它将添加价格