我有2个Python脚本可以在shell中使用,这要归功于argparse。
setup.py的相关部分:
setup(
# (...)
zip_safe=True,
scripts=['bin/bgce.py', 'bin/sizes.py'],
packages=find_packages(),
data_files=data_files,
entry_points = {
'console_scripts': [
'bgce = bgce:main',
'sizes = sizes:main',]
}
)
我最终在/ usr / local / bin中使用了bgce,bgce.py,sizes,sizes.py。全部4个工作。
如果我遗漏了包或脚本行,则没有重复项,但文件会像这样失败:
Traceback (most recent call last):
File "/usr/local/bin/bgce", line 9, in <module>
load_entry_point('Backtestground==1.0', 'console_scripts', 'bgce')()
File "/usr/lib/python2.6/dist-packages/pkg_resources.py", line 305, in load_entry_point return get_distribution(dist).load_entry_point(group, name)
File "/usr/lib/python2.6/dist-packages/pkg_resources.py", line 2244, in load_entry_point return ep.load()
File "/usr/lib/python2.6/dist-packages/pkg_resources.py", line 1954, in load
entry = __import__(self.module_name, globals(),globals(), ['__name__'])
ImportError: No module named bgce
我该怎么办才能安装bgce和尺寸,没有重复的烦恼(for tab-completion).py附加?
答案 0 :(得分:4)
确保实际模块具有 main 功能,如下所示:
def main():
try:
some_stuff()
except KeyboardInterrupt :
print ""
sys.exit()
if __name__ == "__main__" :
main()
我们经常在if __name__ == "__main__" :
下面写出主代码的模式
如果没有实际的main(),则distutils无法获得加载点。 (捕捉^ C是可选的:)我也遇到了这个问题,直到我意外地发现我的一个模块实际工作而其他模块没有。这是差异,一旦纠正,这一切都很好!
答案 1 :(得分:0)
IIRC:拥有bgce.py和sizes.py部分软件包,删除脚本参数,保留入口点。