我正在使用setuptools
努力完成我的第一个Python包+脚本项目。这是我setup.py
的骨架:
setuptools.setup(
name=<PROJECT>,
packages=[<PACKAGE_NAME>],
scripts=['bin/<PACKAGE_NAME>.py'],
python_requires='>=3',
)
我的包位于package_name/
,我的脚本与包的基本名称相同,位于bin/package_name.py
。该脚本执行from package_name import *
。没有依赖关系。
当我运行python3 setup.py install
时,它会成功。此后,当我在Python控制台中执行import package_name
时,它会成功。但是当我从命令行运行脚本时,它在第一次引用包中的组件时失败并显示NameError
。我在Mac OS X和Linux上重现了同样的错误。
为什么会以这种方式失败,但不会抛出ImportError
?如何修复我的脚本或我的setup.py
?
答案 0 :(得分:1)
与包
具有相同的基本名称
这正是问题所在。当您运行package_name.py
并且脚本导入package_name
时,Python会尝试从该脚本导入它,因为它是package_name.py
中的第一个sys.path
(Python会自动添加脚本&# 39; s目录为sys.path
)。
将脚本重命名为package_name
。或者甚至更好地在您的包中创建__main__.py
并使用entry_points
:
setup(
…
entry_points={
'console_scripts': [
'package_name = package_name.__main__:main'
]
},
…
)
这样setuptools
会自动为您创建脚本package_name
。
查看我的mimedecode中的示例。