Как создать пакет Python со встроенной главной функцией test / main.py? - PullRequest
1 голос
/ 20 июня 2010

Желаемое дерево каталогов:

Fibo
|-- src
|   `-- Fibo.py
`-- test
    `-- main.py

Мне нужно позвонить python main.py после того, как cd'ing в test и выполнение main.py запустят все модульные тесты для этого пакета.

В настоящее время, если я делаю:

import Fibo

def main():
    Fibo.fib(100)

if __name__ == "__main__":
    main()

Я получаю ошибку: "ImportError: No module named Fibo".

Но если я делаю:

import sys

def main():
    sys.path.append("/home/tsmith/svn/usefuldsp/trunk/Labs/Fibo/src")
    import Fibo
    Fibo.fib(100)

if __name__ == "__main__":
    main()

Это кажетсяисправить мою ошибкуИ я мог бы двигаться вперед ... но это не пакет Python.Это скорее подход «коллекции файлов».

Как бы вы настроили тестирование для работы в этой структуре каталогов?

Ответы [ 3 ]

1 голос
/ 20 июня 2010

Если я хочу импортировать модуль, который находится в фиксированном, относительном местоположении к файлу, который я оцениваю, я часто делаю что-то вроде этого:

try:
    import Fibo
except ImportError:
    import sys
    from os.path import join, abspath, dirname
    parentpath = abspath(join(dirname(__file__), '..'))
    srcpath = join(parentpath, 'src')
    sys.path.append(srcpath)
    import Fibo

def main():
    Fibo.fib(100)

if __name__ == "__main__":
    main()

Если вы хотите быть хорошим пространством имен-citizen, вы можете del больше не нужны символы в конце блока except.

0 голосов
/ 20 июня 2010

Быстрый и грязный способ: создать символическую ссылку

0 голосов
/ 20 июня 2010

Добавление /home/tsmith/svn/usefuldsp/trunk/Labs/Fibo/src в переменную среды PYTHONPATH позволит вам написать

import Fibo

def main():
    Fibo.fib(100)

if __name__ == "__main__":
    main()

и правильно импортировать .../Fibo/src/Fibo.py.

...