setup.py 安装包和脚本 - NameError 从脚本引用包
setup.py installing package and script - NameError referencing package from script
我正在努力处理我的第一个 Python 包 + 脚本项目,使用 setuptools
。这是我的 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
?
has the same base name as the package
这正是问题所在。当您 运行 package_name.py
并且脚本导入 package_name
Python 尝试从该脚本导入它,因为它是 sys.path
中的第一个 package_name.py
(Python 自动将脚本的目录添加到 sys.path
).
将脚本重命名为 package_name
。或者甚至更好地创建 __main__.py
in your package and use entry_points
:
setup(
…
entry_points={
'console_scripts': [
'package_name = package_name.__main__:main'
]
},
…
)
这样 setuptools
会自动为您创建脚本 package_name
。
查看我的示例 mimedecode。
我正在努力处理我的第一个 Python 包 + 脚本项目,使用 setuptools
。这是我的 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
?
has the same base name as the package
这正是问题所在。当您 运行 package_name.py
并且脚本导入 package_name
Python 尝试从该脚本导入它,因为它是 sys.path
中的第一个 package_name.py
(Python 自动将脚本的目录添加到 sys.path
).
将脚本重命名为 package_name
。或者甚至更好地创建 __main__.py
in your package and use entry_points
:
setup(
…
entry_points={
'console_scripts': [
'package_name = package_name.__main__:main'
]
},
…
)
这样 setuptools
会自动为您创建脚本 package_name
。
查看我的示例 mimedecode。