2016-08-29 57 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的出控制檯安裝後,這是我想要的。問題是,主要 .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' contents? – dsgdfg

+0

from 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

相關問題