В python3, как я могу проверить файл .py, который находится в подкаталоге корня рабочей области?

Предположим, что файловая иерархия имеет вид:

|--WORKSPACE
   |--main.py
   |--subdir
   |  --__init__.py
   |  --sub1.py
   |  --sub2.py

В python2 я хотел бы поместить некоторый тестовый код ниже всего кода модуля в файле сценария субмодуля, и я могу просто запустить и проверить результат. Пусть работающий корневой путь будет рабочим пространством. например в main.py я написал бы

from subdir import sub1

и в sub1.py:

from sub2 import something

if __name__ == '__main__':
    do some tests

в python3, я должен написать так:

from subdir.sub2 import something
[118 ] когда каталог работает с subdir, он непременно остановится с ошибкой импорта ... Поэтому мне нужно изменить pwd на WORKSPACE. Я не думаю, что это элегантный способ, есть ли другой способ запуска в subdir в качестве альтернативы?

1
задан 04.03.2019, 04:17

3 ответа

Ему не нужно имя каталога. Например, предположим

 ├── main.py
 └── subdir
    ├── __init__.py
    ├── sub1.py
    └── sub2.py

в main.py

from subdir import sub2
sub2.foo()

в /subdir/sub1.py

from sub2 import foo

if __name__ == '__main__':
    foo()

в /subdir/sub2.py [ 117]

def foo():
    print("foo!")

Независимо от WORKSPACE везде, где я запускаю sub1, будет работать

0
ответ дан 15.05.2019, 00:05
  • 1
    Все Вы используют python3? It' s нечетный, в моем python3, я выполнил его правильно только под РАБОЧЕЙ ОБЛАСТЬЮ... И какая точная версия Python - Вы использование, 3. X? – Traeyee 04.03.2019, 13:40
  • 2
    @Traeyee I don' t ожидают, что поведение import statments будет зависеть от рабочего каталога. Возможно, необходимо записать более подробное описание того, что Вы делаете. – Goyo 04.03.2019, 21:10
  • 3
    @Goyo, О, извините, я испортил его. Моя проблема от нечто импорта .sub2 (обратите внимание на точку), это не скажет модуля, названного ' основной .foo'; ' основной ' не пакет – Traeyee 04.03.2019, 23:48
  • 4
    Использование @Traeyee from sub2 import foo вместо этого. – Goyo 05.03.2019, 00:02
  • 5
    но несколько раз это возвращается (node:16568) UnhandledPromiseRejectionWarning: TypeError: numbers.split is not a function – Schüler 17.03.2019, 05:21
  • 6
    @Goyo It' верный s, но pycharm не может распознать пункты этого стиля так, чтобы это не могло возобновить некоторую умную грамматическую помощь. That' s, где моя проблема точно заключается – Traeyee 20.03.2019, 01:02

Просто не делай так. Организуйте свой пакет и используйте относительный импорт внутри него, не упоминая имя родительского пакета. При необходимости используйте подпакеты. Наконец (или с самого начала, в зависимости от вашего настроения), создайте подпакет с именем tests, содержащий все ваши тесты. Импортируйте оттуда то, что вы хотите проверить в своем пакете, так же, как вы импортируете из любого другого места внутри вашего пакета. Используйте модуль unittest для написания внутреннего пакета unittest.TestCase для тестов.

Из корня пакета выполните python -m unittest discover, см. здесь или настройте отчет о выполнении тестов и выводе, см. здесь . Вы, вероятно, хотите некоторое время изучить эту страницу помощи.

Теперь вы можете запустить все свои тесты одновременно, хотя есть способы выбрать только некоторые.

0
ответ дан 15.05.2019, 00:05
  • 1
    но несколько раз это возвращается (node:16568) UnhandledPromiseRejectionWarning: TypeError: numbers.split is not a function – Schüler 17.03.2019, 05:21
  • 2
    спасибо, я учился. – Traeyee 20.03.2019, 01:07

Полагаю, вы могли бы добавить

import sys
sys.path.append('subdir')

from subdir import sub1

к вашему main.py, таким образом, он получит все относительные значения импорта в этой подпапке для вас, нет необходимости каждый раз вызывать подпапку

и в sub1.py просто

from sub2 import foo
0
ответ дан 15.05.2019, 00:05
  • 1
    Ну, умный путь – Traeyee 04.03.2019, 13:42
  • 2
    Простите мое незнание, what' s неправильно с этим подходом? Я нахожу его более умным, чем предварительное ожидание namefolder. ко всему импорту в той папке... – lupodellasleppa 04.03.2019, 22:29
  • 3
    @Schü ler можно проверить первый тип numbers и, чем разделение использования, обновление проверки – Code Maniac 17.03.2019, 05:24
  • 4
    @lupodellasleppa Там - ничто неправильно, но посмотрите, например здесь , прочитайте в особенности комментарии Martijn Pieters. Просто don' t злоупотребляют или зависят очень от той техники. – progmatico 22.03.2019, 02:01

Теги

Похожие вопросы