2016-01-11 3 views
4

Я новичок в Python, и я много искал в google и читал статьи об относительном импорте и т. Д. Несмотря на то, что я не могу заставить его работать. Пожалуйста, рассмотрите мою следующую структуру проекта:Структура проекта Python и относительный импорт

/Project 
    /docs 
    /log 
    /prev 
    /src 
     a.py 
    /tests 
     /tests1 
      b.py 
     /tests2 
    .gitignore 
    README.txt 
    program.py 

И то, что я пытаюсь добиться, чтобы импортировать класс из файла a.py внутри сценария b.py. Вообще говоря, сценарий b.py должен иметь строку с импортом a.py. Я прочитал несколько статей об использовании файлов __init__.py, где их следует поместить? И должен ли я изменить PYTHONPATH каким-то образом, как? И последний вопрос, структура проекта ОК? Спасибо за ваше время и помощь!

+2

Посмотрите, например, http://www.jeffknupp.com/blog/2013/08/16/open-sourcing-a-python-project-the-right-way/ - вы должны написать 'setup.py' и * install * ваш пакет для импорта по тестам. Сама директория '/ tests' обычно не является модулем (поэтому нет' __init __. Py') - см. Https://pytest.org/latest/goodpractises.html#goodpractises – jonrsharpe

+0

@jonrsharpe "сама директория/tests isn ' t обычно модуль "- вы имеете в виду пакет, а не модуль там? –

+0

@TomDalton yes, package – jonrsharpe

ответ

1

Вы можете добавить родительскую папку, путь питона (sys.path):

import sys 
sys.path.insert(0,'../..') 

from a import class_name 
+1

Событие, если оно решает проблему здесь, я не думаю, что это ценный вариант в большинстве ситуаций. Необходимость делать эти трюки часто подразумевает, что архитектура самого проекта плоха. Некоторое предложение, которое приходит мне на ум: используйте setup.py для создания пространства имен и зависимостей разработки/тестирования и используйте абсолютный импорт в тестах; использовать подходящий испытательный бегун; и т.п. – FunkySayu

Смежные вопросы