您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何在包中包含示例或测试程序?

5b51 2022/1/14 8:21:51 python 字数 5406 阅读 510 来源 www.jb51.cc/python

Python Cookbook为“典型库包”建议了以下树结构:projectname/ README.txt Doc/ documentation.txt projectname/ __init__.py foo.py bar.py utils/

概述

Python Cookbook为“典型库包”建议了以下树结构:

projectname/
    README.txt
    Doc/
        documentation.txt
    projectname/
        __init__.py
        foo.py
        bar.py
        utils/
            __init__.py
            spam.py
            grok.py
    examples/
        helloworld.py

您会注意到examples /不是实际包的一部分,它位于projectname / projectname /下(您可以在其中找到包的顶级__init__.py).

那么,examples / helloworld.py显然需要导入projectname包.

我知道StackOverflow中至少有2-3个相关问题.我不相信这是重复的,因为其他问题要么涉及到包内导入,要么在它们不在同一目录中时从另一个导入一个python模块的一般情况.在打包库时,我特别要求建议的方法.

有没有办法在不修改路径的情况下实现这一目标?如果修改路径是唯一的方法,有没有办法以优雅的方式完成?

让我详细说明最后一点.在Kenneth Reitz的Repository Structure and Python中,出现了类似的结构,其中包括tests /而不是examples /.这是完全相同的问题.他建议使用“一个简单(但显式)路径修改来正确解析包.”好的,但这是实际的代码

import os
import sys
sys.path.insert(0,os.path.abspath('..'))

我真的不喜欢..部分.我希望有一个更通用的解决方案,希望能从我选择运行示例(或测试)的任何目录中使用.

确实,您可以在技术上使用sys.path.insert(0,os.path.abspath(‘..’))为python添加任何路径以允许从中导入,但这意味着您,开发人员必须确保添加的路径始终位于正确的位置.

用户通常安装包以使用它们.开发人员有一个明确的工作流程:

>安装了pip和virtualenv(甚至更好,virtualenvwrapper)
>使用pip的-e标志以可编辑模式安装软件包,这意味着您对代码所做的任何更改都将直接影响执行.每次更改代码时都不必重新安装.
>由于您的代码始终是安装的(特别是在作为用户站点包下,但在开发时处于可编辑模式下),您始终可以使用任何示例或测试中的显式名称导入您的包.

常见的工作流程:

$pip install virtualenv
...
$virtualenv distro
New python executable in /home/nir0s/work/distro/bin/python3
Also creating executable in /home/nir0s/work/distro/bin/python
Installing setuptools,pip,wheel...done.

$source distro/bin/activate

# install in editable mode
$pip install -e ~/repos/nir0s/distro/
Obtaining file:///home/nir0s/repos/nir0s/distro
Installing collected packages: distro
  Running setup.py develop for distro
Successfully installed distro

(distro) $pip freeze
appdirs==1.4.3
-e git+git@github.com:nir0s/distro@e8a182f9d1dbe6391f25...#egg=distro
packaging==16.8
pyparsing==2.2.0
six==1.10.0

以可编辑模式安装的软件包意味着有一个指向软件包目录的egg-link文件

$cat distro/lib/python3.6/site-packages/distro.egg-link 
/home/nir0s/repos/nir0s/distro

用户将在不处理可编辑模式的情况下执行相同的操作.只需创建虚拟环境并在其中安装包.然后,当他们完成工作后,他们将删除这些虚拟环境.十分简单.

总结

以上是编程之家为你收集整理的如何在包中包含示例或测试程序?全部内容,希望文章能够帮你解决如何在包中包含示例或测试程序?所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶