Python 为什么我在安装时总是收到这样的消息,说EntryPoint必须在';名称=模块:属性[extras]
大家好,我在OSx Mavericks上,使用python 2.7和pip版本6.0.8以及setuptools版本12.2 当我尝试安装我的项目时,会收到警告消息,但安装成功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
$ 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()
的参数。