使用Setuptools设置entry_points

4 投票
1 回答
3308 浏览
提问于 2025-04-17 10:41

我想用setuptools来安装一个脚本,下面是我的设置:

在我的开发目录里,有以下文件:

  • setup.py 和
  • z_script.py。

z_script.py文件的内容是这样的:

def main():
    print "Running..."

而我的setup.py文件是这样的:

from setuptools import setup

setup(
      name = 'z_script', version = '0.2', 
      entry_points = {"console_scripts": ["z_script = z_script:main"]},
      )

当我运行python setup.py install时,脚本成功安装到了正确的bin目录。

但是,当我用z_script来运行这个脚本时,出现了一个错误:

Traceback (most recent call last):
  File "./z_script", line 8, in <module>
    load_entry_point('z-script==0.2', 'console_scripts', 'z_script')()
  File "/home/woltan/local/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/pkg_resources.py", line 318, in load_entry_point
  File "/home/woltan/local/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/pkg_resources.py", line 2221, in load_entry_point
  File "/home/woltan/local/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/pkg_resources.py", line 1954, in load
ImportError: No module named z_script

这个bin目录可以通过系统的PATH环境变量访问,并且在我运行z_script时没有设置PYTHONPATH环境变量。

现在我想问的是:

我的设置哪里出了问题?为什么脚本找不到正确的模块?

1 个回答

5

你没有告诉setuptools去安装z_script。你可以使用find_packages这个方法,或者把z_script放在py_modules这个关键词里。

...
packages = find_packages(),
...

或者

...
py_modules = ['z_script'],
...

撰写回答