setup.py console_scripts入口点无法解析导入

时间:2016-08-29 13:36:37

标签: python setuptools

我有以下setup.py:

from setuptools import setup
from distutils.core import setup
setup(
    name="foobar",
    version="0.1.0",
    author="Batman",
    author_email="batman@gmail.com",
    packages = ["foobar"],
    include_package_data=True,
    install_requires=[
        "asyncio",
    ],
    entry_points={
        'console_scripts': [
            'foobar = foobar.__main__: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'.

更新。 __init__.py的内容为

from wont_be_imported_one import wont_be_imported_one

wont_be_imported_one.py来自wont_be_imported_one函数,我实际上需要导入它。

1 个答案:

答案 0 :(得分:3)

在Python 3中,默认情况下import是绝对的,因此from wont_be_imported_one import ...内的foobar将被解释为对wont_be_imported_one之外的某个模块的引用{1}}。您需要使用相对导入:

foobar

有关详细信息,请参阅PEP 328