2016-08-29 2 views
1

Я следующий setup.py:setup.py console_scripts точка входа не разрешает импорт

from setuptools import setup 
from distutils.core import setup 
setup(
    name="foobar", 
    version="0.1.0", 
    author="Batman", 
    author_email="[email protected]", 
    packages = ["foobar"], 
    include_package_data=True, 
    install_requires=[ 
     "asyncio", 
    ], 
    entry_points={ 
     'console_scripts': [ 
      'foobar = foobar.__main__:main' 
     ] 
    }, 
) 

Теперь инсталлируется главный .py файл и отозваны по Foobar из консоли после установки, которая что я хотел. Проблема заключается в том, что main .py имеет импорт по строке 3, и это не работает.

Так что моя структура папок следующим образом

dummy/setup.py 
dummy/requirements.txt 
dummy/foobar/__init__.py 
dummy/foobar/__main__.py 
dummy/foobar/wont_be_imported_one.py 

python3 setup.py bdist Я бегу, находясь в фиктивной каталоге. После запуска Foobar после установки, я получаю ошибку

File "/usr/local/bin/foobar", line 9, in <module> 
    load_entry_point('foobar==0.1.0', 'console_scripts', 'foobar')() 

[...] 

ImportError: No module named 'wont_be_imported_one'. 

UPDATE. __init__.py имеет содержание

from wont_be_imported_one import wont_be_imported_one 

wont_be_imported_one.py имеет от wont_be_imported_one функции, которые я на самом деле нужно импортировать.

+1

'__init __. Py' содержание? – dsgdfg

+0

от wont_be_imported_one import wont_be_imported_one – kaboom

ответ

2

В Python 3, import s является абсолютным по умолчанию, и поэтому from wont_be_imported_one import ... внутри foobar будет интерпретироваться как ссылка на какой-то модуль с именем wont_be_imported_one вне foobar. Вы должны использовать относительный импорт вместо:

from .wont_be_imported_one import wont_be_imported_one 
# ^Add this 

См PEP 328 для получения дополнительной информации.