Python 为什么我在安装时总是收到这样的消息,说EntryPoint必须在';名称=模块:属性[extras]

Python 为什么我在安装时总是收到这样的消息,说EntryPoint必须在';名称=模块:属性[extras],python,pip,setuptools,distutils,Python,Pip,Setuptools,Distutils,大家好,我在OSx Mavericks上,使用python 2.7和pip版本6.0.8以及setuptools版本12.2 当我尝试安装我的项目时,会收到警告消息,但安装成功 $ python setup.py install --user 如果我使用distutils,我会得到下面的消息,它的设置可能没有kwarg入口点。 /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py: 2

大家好,我在OSx Mavericks上,使用python 2.7和pip版本6.0.8以及setuptools版本12.2

当我尝试安装我的项目时,会收到警告消息,但安装成功

$ python setup.py install --user
如果我使用distutils,我会得到下面的消息,它的设置可能没有kwarg入口点。 /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py: 267:用户警告:未知的分发选项:“入口点” 警告。警告(msg)

但是,当我尝试以以下方式使用pip进行安装时,会收到以下错误消息,并且安装不会继续:

$ pip install --user --editable .
如果使用pip,即使导入了distutils安装程序,也会收到以下错误消息

Obtaining file:///Users/Me/Development/pyclones/git-maildiff
    error in maildiff setup command: ("EntryPoint must be in 'name=module:attrs [extras]' format", 'git-maildiff=scripts.git-maildiff')
    Complete output from command python setup.py egg_info:
    error in maildiff setup command: ("EntryPoint must be in 'name=module:attrs [extras]' format", 'git-maildiff=scripts.git-maildiff')

    ----------------------------------------
    Command "python setup.py egg_info" failed with error code 1 in /Users/Me/Development/pyclones/git-maildiff
而我需要这样的设置

setup(
    name='maildiff',
    version=VERSION,
    author='Sanjeev Kumar',
    author_email='myemail@gmail.com',
    packages=['emaildiff', 'emaildiff/mail',],
    py_modules=['maildiff_cmd', 'version', 'send'],
    data_files = ['VERSION'],
    scripts=['scripts/git-maildiff'],
    license='LICENSE',
    description='Package to email color git diff',
    long_description=open('README.md').read(),
    entry_points={
    'console_scripts':
        ['git-maildiff=scripts.git-maildiff']
                }
)

有谁能帮我解释一下为什么我会这样做,我更喜欢使用pip,因为我可以在以后使用pip卸载它,但我认为它们不是像setup.py uninstall或remove这样的命令。

您在这两行中定义的入口点:

'console_scripts':
        ['git-maildiff=scripts.git-maildiff']
有一个
-
,我不确定是否支持(
gitmaildiff
不是有效的Python模块名)。此外,它还忽略了要调用的函数名:
main

您可以先尝试添加
main

'console_scripts':
        ['git-maildiff=scripts.git-maildiff:main']
如果不起作用,请重命名脚本以删除
-
。我认为您仍然可以将
git maildiff
作为入口点名称,只需重命名模块:

'console_scripts':
        ['git-maildiff=scripts.git_maildiff:main']

这将为您提供一个调用
git\u maildiff
模块的
git maildiff
脚本。您还必须重命名模块文件本身。

您是否完成了
pip安装--升级setuptools
entry\u points
关键字列在下面,因此可能您的setuptools版本太旧,无法包含它?您确定
'git-maildiff=scripts.git-maildiff'
有效吗?不确定,但我认为您必须在这里给出一个方法:
'git-maildiff=scripts.git-maildiff:mymethod'
我需要
-
,因为这是git识别我编写的git命令的方式。正如我所写的,您的脚本名可以包含破折号,但我们的模块名可能不能。使用
'gitmaildiff=scripts.gitmaildiff:main'
.aah,是的,我一开始就认为我们告诉脚本gitmaildiff将进入脚本目录,这是完全错误的。现在我开始工作了,谢谢。Hello@Christian Aichinger,这个控制台脚本值似乎不喜欢我,如果我在脚本中使用
git maildiff
,那么在安装时它会创建一个包装,导入
pkg\u资源
,然后
加载\u入口点
,而不是我创建的包装,如果我使用gitmaildiff,它工作得很好!为什么会这样?如果我使用
git maildiff
I get error message main接受两个未给定的参数。如果生成一个egg或一个轮子,git_maildiff.py将仅位于egg/wheel中,而不是文件系统中的实际文件。因此,setuptools不直接调用它,而是使用pkg_资源。main不能接受任何参数(即签名
defmain():
)。在
中执行所有操作,如果
,则将其移动到main中,并删除
main()
的参数。