python包和测试的问题

时间:2010-07-14 23:13:30

标签: python unit-testing

我有一个像这样的目录结构:

project
|  __init__.py
| project.py
| src/
    | __init__.py
    | class_one.py
    | class_two.py
| test/
    | __init__.py
    | test_class_one.py

哪个project.py只是实例化ClassOne并运行它。

我的问题是在测试中,我不知道如何导入src类。我尝试过导入这些方法,但我什么都没得到:

from project.src.class_one import ClassOne

from ..src.class_one import ClassOne

我做错了什么?是否有更好的目录结构?

-----编辑-----

我改变了我的目录结构,现在就是这样:

Project/
|   project.py
|   project/
    |   __init__.py
    |   class_one.py
    |   class_two.py
    |   test/
        |   __init__.py
        |   test_class_one.py

test_class_one.py 文件中,我试图以这种方式导入:

from project.class_one import ClassOne

它仍然不起作用。我没有在bin目录中使用可执行的project.py,因为我无法从更高级别的dir导入包。 :(

感谢。 = d

2 个答案:

答案 0 :(得分:1)

这一切都取决于你的python路径。在这里实现您想要做的最简单的方法是将PYTHONPATH环境变量设置为“project”目录所在的位置。例如,如果您的来源居住在:

/Users/crocidb/src/project/

我会:

export PYTHONPATH=/Users/crocidb/src

然后在test_one.py中我可以:

import project.src.class_one

实际上我可能会这样做:

export PYTHONPATH=/Users/crocidb/src/project

然后在test_one.py:

import src.class_one

但这只是我的偏好,实际上取决于你的层次结构的其余部分。另请注意,如果您已经在PYTHONPATH中添加了某些内容,则需要添加它:

export PYTHONPATH=/Users/crocidb/src/project:$PYTHONPATH

或以其他顺序,如果您希望最后搜索项目路径。

除了你需要使用windows的语法设置环境变量外,这一切都适用于Windows。

答案 1 :(得分:0)

来自Jp Calderone's excellent blog post

  

执行:

     
      
  • 将目录命名为与项目相关的内容。例如,如果你的   项目名为“Twisted”,名称为   其源代码的顶级目录   文件扭曲。当你发布时,   你应该包括一个版本号   后缀:Twisted-2.5。
  •   
  • 创建一个目录Twisted / bin并将可执行文件放在那里,如果你   有什么。不要给他们一个.py   扩展,即使它们是Python   源文件。不要输入任何代码   他们除了导入和调用一个   主要功能在其他地方定义   在你的项目中。 (轻微的皱纹:   因为在Windows上,解释器是   由文件扩展名选择,您的   Windows用户实际上确实需要.py   延期。所以,当你打包   Windows,您可能想要添加它。   不幸的是,这并不容易   我所知道的那种诡计   自动化这个过程。考虑到   在POSIX上,.py扩展名是   只有一个疣,而在Windows上   缺乏是一个真正的错误,如果你的   userbase包括Windows用户   可能想要选择只有.py   到处扩展。)
  •   
  • 如果您的项目可以表示为单个Python源文件,那么请将其放入   进入目录并命名它   与您的项目相关的东西。对于   例如,Twisted / twisted.py。如果你   需要多个源文件,创建一个   包裹代替(扭曲/扭曲/,   空着   扭曲/扭曲/ __ init__.py)和地方   你的源文件。例如,   扭曲/捻/ internet.py。
  •   
  • 将您的单元测试放在包的子包中(注意 - 这意味着   单个Python源文件   上面的选项是一个技巧 - 你永远   需要至少一个其他文件   单元测试)。例如,   扭曲/捻/测试/。当然,制作   它是一个包   扭曲/捻/测试/ __ init__.py。   将测试放在像   扭曲/捻/测试/ test_internet.py。
  •   
  • 添加Twisted / README和Twisted / setup.py来解释和   分别安装你的软件   如果你感觉很好。
  •   
     

不要:

     
      
  • 将您的源代码放在名为src或lib的目录中。这很难   无需安装即可运行。
  •   
  • 将您的测试放在Python包之外。这使得很难   针对已安装的运行测试   版本
  •   
  • 创建一个只有__init__.py的包,然后将所有代码放入__init__.py。只需制作一个模块   而不是包,它更简单。
  •   
  • 尝试提出神奇的黑客攻击,让Python能够导入你的模块   或没有用户添加的包   包含它的目录   导入路径(通过PYTHONPATH或   其他一些机制)。你不会   正确处理所有案例和用户   你的时候会生你的气   软件无法正常运行   环境。
  •