Pakiety Pythona?

Ok, myślę, że cokolwiek robię źle, prawdopodobnie jest to oczywiste, ale nie mogę tego zrozumieć. Przeczytałem i ponownie przeczytałem sekcję samouczka na temat pakietów i jedyne, co mogę sobie wyobrazić, to to, że nie zadziała, ponieważ wykonuję go bezpośrednio. Oto konfiguracja katalogu:

eulerproject/
  __init__.py
  euler1.py
  euler2.py
  ...
  eulern.py
  tests/
    __init__.py
    testeulern.py

Oto zawartość testeuler12.py (pierwszy moduł testowy, który napisałem):

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()

Teraz, gdy wykonam to z IDLE iz wiersza poleceń w katalogu, pojawia się następujący błąd:

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

Myślę, że problem polega na tym, że ponieważ uruchamiam go bezpośrednio, nie mogę wykonywać względnych importów (ponieważ__name__ zmiany, a moje niejasne zrozumienie opisu pakietów jest takie__name__ jest częścią tego, w jaki sposób mówi, w którym pakiecie znajduje się pakiet), ale w takim razie, co sugerujesz, jak zaimportować kod „produkcyjny” przechowywany 1 poziom wyżej z kodu testowego?

questionAnswers(2)

yourAnswerToTheQuestion