【问题标题】:running a python package after compiling and uploading to pypicloud server编译并上传到pypicloud服务器后运行python包
【发布时间】:2015-07-24 04:17:08
【问题描述】:

各位, 在构建并部署一个名为 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 的某个地方?

谢谢!!!

【问题讨论】:

  • 你的 setup.py 是什么?
  • 你试过运行myShtuff.py吗?

标签: python pypi


【解决方案1】:

您的包中需要一个__main__.py,并在 setup.py 中定义一个入口点。

请参阅herehere,但简而言之,当使用python -m 运行模块时,您的__main__.py 会运行您的主要功能,并且 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 是该文件中的一个函数。

【讨论】:

    【解决方案2】:

    您需要在您的setup.py 中定义entry_point 以便直接从命令行执行某些操作:

    entry_points={
        'console_scripts': [
            'cursive = cursive.tools.cmd:cursive_command',
        ],
    },
    

    更多详情请见here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-28
      相关资源
      最近更新 更多