编译并上传到pypicloud服务器

时间:2015-05-13 03:44:22

标签: python pypi

民间,   在构建并将名为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中的某个地方?

感谢!!!

2 个答案:

答案 0 :(得分:9)

您的包中需要__main__.py,并且在setup.py。

中定义了一个入口点

请参阅herehere,但简而言之,__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