民间,
在构建并将名为myShtuff
的软件包部署到本地pypicloud服务器之后,我可以将其安装到单独的虚拟环境中。
除了可执行文件的路径之外,一切似乎都有效......
(venv)[ec2-user@ip-10-0-1-118 ~]$ pip freeze
Fabric==1.10.1
boto==2.38.0
myShtuff==0.1
ecdsa==0.13
paramiko==1.15.2
pycrypto==2.6.1
wsgiref==0.1.2
如果我尝试直接运行脚本,我会得到:
(venv)[ec2-user@ip-10-0-1-118 ~]$ myShtuff
-bash: myShtuff: command not found
但是,我可以通过以下方式运行它:
(venv)[ec2-user@ip-10-0-1-118 ~]$ python /home/ec2-user/venv/lib/python2.7/site-packages/myShtuff/myShtuff.py
..works
构建包装时我犯了错误吗?在setup.cfg或setup.py中的某个地方?
感谢!!!
答案 0 :(得分:9)
您的包中需要__main__.py
,并且在setup.py。
请参阅here和here,但简而言之,__main__.py
运行使用python -m
运行模块时的主要功能,而setuptools可以执行任何任意功能想以脚本的形式运行。你可以做其中之一或两者。您的__main__.py
看起来像是:
from .stuff import my_main_func
if __name__ == "__main__":
my_main_func()
并在setup.py中:
entry_points={
'console_scripts': [
'myShtuffscript = myShtuff.stuff:my_main_func'
]
此处,myShtuffscript
是您希望调用可执行文件的任何内容,myShtuff
包的名称,stuff
包中文件的名称(myShtuff/stuff.py
) ,和my_main_func
该文件中函数的名称。
答案 1 :(得分:4)
您需要在entry_point
中定义setup.py
才能直接从命令行执行某些操作:
entry_points={
'console_scripts': [
'cursive = cursive.tools.cmd:cursive_command',
],
},
可以找到更多详细信息here。