Хорошо, я думаю, что я делаю неправильно, это, вероятно, ослепительно очевидно, но я не могу понять это. Я прочитал и перечитал раздел руководства по пакетам, и единственное, что я могу понять, это то, что это не сработает, потому что я выполняю его напрямую. Вот настройки каталога:Пакеты Python?
eulerproject/
__init__.py
euler1.py
euler2.py
...
eulern.py
tests/
__init__.py
testeulern.py
Вот содержание testeuler12.py (первый тестовый модуль я написал):
import unittest
from .. import euler12
class Euler12UnitTests(unittest.TestCase):
def testtriangle(self):
"""
Ensure that the triangle number generator returns the first 10
triangle numbers.
"""
self.seq = [1,3,6,10,15,21,28,36,45,55]
self.generator = euler12.trianglegenerator()
self.results = []
while len(self.results) != 10:
self.results.append(self.generator.next())
self.assertEqual(self.seq, self.results)
def testdivisors(self):
"""
Ensure that the divisors function can properly factor the number 28.
"""
self.number = 28
self.answer = [1,2,4,7,14,28]
self.assertEqual(self.answer, euler12.divisors(self.number))
if __name__ == '__main__':
unittest.main()
Теперь, когда я исполню это от IDLE и от команды линии в то время как в каталоге, я получаю следующее сообщение об ошибке:
Traceback (most recent call last):
File "C:\Documents and Settings\jbennet\My Documents\Python\eulerproject\tests\testeuler12.py", line 2, in <module>
from .. import euler12
ValueError: Attempted relative import in non-package
Я думаю, что проблема в том, что, так как я бегу это прямо, я не могу сделать относительно импорта (потому что __name__
изменения, и мой смутное понимание описания пакетов состоит в том, что __name__
является частью того, как он сообщает, в каком пакете он находится), но в этом случае, что вы, ребята, предлагаете для того, чтобы импортировать код 'production', сохраненный на 1 уровне от тестового кода?
Просто выберите и нажмите кнопку с образцом кода. Или оберните его в '' –