运行一个python编译后的包上传到pypicloud服务器

running a python package after compiling and uploading to pypicloud server

各位, 在构建一个名为 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

如果我直接尝试 运行ning 脚本,我得到:

(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 中的某处?

谢谢!!!

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

参见 here and here 但简而言之,当 运行 使用 python -m 和设置工具安装模块时,无论您的主要功能是什么,您的 __main__.py 运行 都是可以将任何你想要的任意函数 运行 作为脚本。你可以做其中一个或两个。您的 __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 该文件中函数的名称。

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

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

可以找到更多详细信息 here