setup.py console_scripts 入口点不解析导入
setup.py console_scripts entry point does not resolve import
我关注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
I 运行 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
的函数,我实际上需要导入它。
在Python3中,import
默认是绝对的,所以foobar
里面的from wont_be_imported_one import ...
会被解释为对某个名为[=的模块的引用14=] 在 foobar
之外。您需要改用相对导入:
from .wont_be_imported_one import wont_be_imported_one
# ^ Add this
有关详细信息,请参阅 PEP 328。
我关注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
I 运行 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
的函数,我实际上需要导入它。
在Python3中,import
默认是绝对的,所以foobar
里面的from wont_be_imported_one import ...
会被解释为对某个名为[=的模块的引用14=] 在 foobar
之外。您需要改用相对导入:
from .wont_be_imported_one import wont_be_imported_one
# ^ Add this
有关详细信息,请参阅 PEP 328。