当前位置:  开发笔记 > 编程语言 > 正文

使用共享包部署python应用程序

如何解决《使用共享包部署python应用程序》经验,为你挑选了1个好方法。

我正在考虑如何安排一个部署的python应用程序,它将具有

    位于/ usr/bin /中的可执行脚本,它将为实现的功能提供CLI

    安装在当前site-packages目录所在的库.

现在,我目前在源代码中有以下目录结构:

foo.py
foo/
  __init__.py
  ...

我想这不是最好的做事方式.在开发过程中,一切都按预期工作,但是在部署时,foo.py中的"from foo import FooObject"代码似乎试图导入foo.py本身,这不是我正在寻找的行为.

所以问题是编排这样的情况的标准做法是什么?我能想到的一件事是,在安装时,将foo.py重命名为foo,这会阻止它自动导入,但这看起来相当尴尬......

我认为问题的另一部分是这是一个命名挑战.也许调用可执行脚本foo-bin.py?



1> nosklo..:

这篇文章非常好,并向您展示了一个很好的方法.Do列表中的第二项回答了您的问题.

无耻的复制粘贴:

Python项目的文件系统结构

作者:Jp Calderone

做:

将目录命名为与项目相关的内容.例如,如果您的项目名为"Twisted",请为其源文件命名顶级目录Twisted.执行发布时,应包含版本号后缀:Twisted-2.5.

Twisted/bin如果有的话,创建一个目录并将可执行文件放在那里..py 即使它们是Python源文件,也不要给它们扩展.除了导入和调用项目中其他地方定义的main函数之外,不要在其中添加任何代码.

如果您的项目可以表示为单个Python源文件,那么将其放入目录并将其命名为与项目相关的内容.例如,Twisted/twisted.py.如果您需要多个源文件,请改为创建一个包(Twisted/twisted/,使用空 Twisted/twisted/__init__.py)并将源文件放入其中.例如, Twisted/twisted/internet.py.

将您的单元测试放在包的子包中(注意 - 这意味着上面的单个Python源文件选项是一个技巧 - 您总是需要至少一个其他文件用于您的单元测试).例如, Twisted/twisted/test/.当然,让它成为一个包 Twisted/twisted/test/__init__.py.将测试放在像 Twisted/twisted/test/test_internet.py.

如果你感觉很好,分别添加Twisted/READMETwisted/setup.py解释和安装你的软件.

别:

将您的源放在名为src或的目录中lib.这使得在没有安装的情况下很难运行.

把你的测试放在你的Python包之外.这使得难以针对已安装的版本运行测试.

创建一个只包含a __init__.py然后将所有代码放入的包__init__.py.只需制作一个模块而不是一个包,它就更简单了.

尝试提出神奇的黑客攻击,使Python能够导入您的模块或包,而无需用户将包含它的目录添加到其导入路径(通过PYTHONPATH或其他一些机制).您将无法正确处理所有情况,当您的软件无法在其环境中工作时,用户会对您生气.

推荐阅读
k78283381
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有