這個問題是由指令在python guide引起的添加項目到SYS路徑在測試中,這似乎不使用工作,除非我誤解的說明如何將包添加到SYS路徑進行測試
我有一個目錄結構,Python項目這樣
sample/a.py
sample/b.py
sample/c.py
sample/__init__.py
test/context.py
test/test_something.py
test/__init__.py
docs
據the python guide,我應該創建一個測試/ context.py文件,加入
import os
import sys
sys.path.insert(0, os.path.abspath('..'))
import sample
然後,在我的test/test_something.py
文件,它說我能做到這一點
from .context import sample
資料說「如預期這將始終工作。」
,但是,當我cd
到測試和運行
python -m unittest test_something
我得到一個錯誤
ValueError: Attempted relative import in non-package
,具體錯誤信息指的是這樣的:from .context import sample
問:我怎麼能將我的示例包正確添加到sys路徑中?
回答時,您是否也可以澄清解決方案是否會處理樣本包中的絕對導入。例如,我的sample.a導入sample.b等。當我測試的結構不同時,我做了絕對導入的sample.a,但由於它的相對導入爲from .b import Boo
,它產生了類似的錯誤
更新
`File "/usr/local/lib/python2.7/runpy.py", line 162 in _run_module_as_main "__main__", fname, loader, pkg_name)
File "/usr/local/lib/python2.7/runpy.py", line 72, in _run_code exec code in run_globals
File "/usr/local/lib/python2.7/unittest/__main__.py", line 12, in module main(module=None)
File "/usr/local/lib/python2.7/unittest/main.py", line 94, in __init__ self.parseArgs(argv)
File "/usr/local/lib/python2.7/unittest/main.py", line 149 in parseArgs self.createTests()
File "/usr/local/lib/python2.7/unittest/main.py", line 158, in createTests self.module)
File "/usr/local/lib/python2.7/unittest/loader.py", line 130, in loadTestsFromNames suites = [self.loadTestsFromName(name,module) for name in names]
File "/usr/local/lib/python2.7/unittest/loader.py", line 91, in loadTestsFromName module = __import__('-'.join(parts_copy))
File "test_something.py", line 8, in module from .context import sample
更新
,如果我從根目錄運行以下命令
python -m unittest test
它說, 「在0.000s冉0試驗」
如果如由@cuongnv的意見建議,我從根目錄
python -m unittest test/test_something.py
或本(沒有文件擴展名)運行該
python -m unittest test/test_something
它說:「進口的文件名不支持「
Python版本您使用的?很確定相對的進口得到了Python的重做3 –
呃,好的;你可以發佈完整的追溯,然後?和'__init __。py'文件的內容? –
我添加了堆棧跟蹤。謝謝。另外,爲了回答@DarthVader的問題,我使用了python 2,但是我也讓應用程序在python 3上運行,因此我還在示例文件夾中的每個文件的頂部使用'from __future__ import absolute_import' – Leahcim