发布于2019-08-24 15:05 阅读(493) 评论(0) 点赞(19) 收藏(1)
这是一个经常以不同形式提出的问题,并经常得到“大声笑你没有做好”的回答。很确定这是因为人们(包括我)有一个常识场景试图用作实现,解决方案并不明显(如果你之前没有这样做过)。
会接受一个“让飞出瓶子”的答案。
特定
project/
__init__.py
/code
__init__.py
sut.py
/tests
__init__.py
test_sut.py
tests_sut.py开始的位置:
import code.sut
在根目录中运行nosetests会导致:
ImportError: No module named code.sut
旅行途径:
a)做亲戚使用
from ..code import sut
b)将项目的根添加到PYTHONPATH
c)使用
sys.path.append
在每个测试模块的开头导入之前添加..路径。
d)只记得做一个
setup.py
在项目上,在运行测试之前将模块安装到站点包中。
因此,要求是在测试包根目录下面有可以访问项目的测试。上面的每一个对我来说都不觉得“自然”,已经证明有问题或者看起来太辛苦了!
在java中这是有效的,但基本上是通过构建工具/ IDE将所有类放在类路径上。也许问题是我期待Python的“魔力”?在Flask webframework测试中已经注意到,选项d)似乎是首选。
在任何情况下,下面的陈述推荐一个首选的解决方案将消除我自己的“不自然”的感觉。
您已经很好地回答了您的问题.. D(安装到系统位置)是可分发代码的首选。我通常使用C(修改sys.path),因为我不希望系统安装我的数百个自定义库。理论上A(相对导入)似乎更好,但有些情况下它失败了。B(PYTHONPATH)出来了,我认为真的只是出于测试目的。
这几乎总结了所有选项。您喜欢的选项(Python神奇地知道在哪里查看)实际上不是一个可行的解决方案,因为它可能导致不可预测的结果,例如从不相关的项目中自动查找库。
在我看来,最好的办法是将它放在程序的入口点:
import sys, os
sys.path = [os.path.abspath(os.path.dirname(__file__))] + sys.path
作者:黑洞官方问答小能手
链接:https://www.pythonheidong.com/blog/article/57095/2dfba0a3baaa93e14ea8/
来源:python黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!