2016-09-12 1 views
0

Я перехожу к пакетному рабочему процессу для проекта, над которым я работал. Я хочу иметь возможность разделить среду разработки и производства, и я думаю, что setuptools предлагает эту возможность с некоторой степенью легкости.Относительный импорт Python с использованием setuptools со сценариями

У меня есть проект структурирована следующим образом:

modulename/ 
    setup.py 
    modulename/ 
     file_a.py 
     script.py 

В script.py, я хочу импортировать file_a.py. В настоящее время я делаю это, делая import file_a.

Мой setup.py выглядит следующим образом:

from setuptools import setup, find_packages 

setup(name='modulename', 
    packages = find_packages(), 
    package_dir = {'': '../modulename'}, 
    scripts = ['modulename/script.py']) 

В настоящее время, когда я бегу script.py после выполнения python setup.py install, я получаю сообщение об ошибке:

SystemError: Parent module '' not loaded, cannot perform relative import

Я пробовал различные перестановки от package_dir = ..., наиболее заметно package_dir = {'': 'modulename'}, но это порождает другую ошибку при установке, error: package directory 'modulename/modulename' does not exist

Я не уверен, что я делаю неправильно. Документация онлайн для setuptools относительно невелика в отношении ситуаций, связанных с относительным импортом. Может ли кто-нибудь указать мне в правильном направлении?

+0

Я предполагаю, что проблема заключается не в 'setup.py', а' script.py', запущенной как модуль '__main__', и одновременном использовании относительного импорта. Взгляните [здесь] (http://stackoverflow.com/questions/16981921/relative-imports-in-python-3) –

+0

Хорошо, так перемещение здесь, чтобы сохранить скрипт вне пакета, а затем просто использовать нормальный импорт? –

+0

Это, по сути, это, я полагаю. –

ответ

1

Проблема не связана с setuptools. Использование относительного импорта внутри модуля, выполняемого как __main__, не работает из коробки. Существуют обходные пути/хаки, но наиболее распространенные решения, похоже, перемещают сценарий из пакета или используют абсолютный импорт в файле сценария.

Взгляните на Relative imports in Python 3 для получения полной информации.

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