我想到如何安排部署的蟒蛇的应用程序,它将拥有一个

  1. 可执行script located in/usr/bin/这将提供一个CLI功能的实施
  2. 图书馆安装到哪里目前的网站-包装目录。

现在,目前,我有如下目录结构中我的来源:

foo.py
foo/
  __init__.py
  ...

我猜是不是最好的方式来做事情。在开发过程中,一切正常,因为预期,但是在部署时,"从foo进FooObject"的代码foo.py 似乎试图进口foo.py 本身,这是不行我要找的。

因此,问题是是什么的标准做法,安排像这样的情况?有一件事我能想到的是,当时安装,重新命名foo.py 只是foo,停止它从进口自身,但这似乎相当尴尬...

另一个问题的一部分,我想,是,它是一个命名的挑战。也许是电话这可执行的脚本foo-bin.py?

有帮助吗?

解决方案

这篇文章 很好,显示了你一个很好的方式来做到这一点。第二个项目从 列表的回答你的问题。

无耻的复制粘贴:

文件系统结构的一个项目蟒蛇

通过 Jp Calderone

这样做:

  • 名目录中的一些相关的项目。例如,如果你的 项目名为"扭转",命名 顶级目录其来源 文件 Twisted.当你做稿, 你应该包括一个版本的数量 后缀: Twisted-2.5.
  • 创建一个目录 Twisted/bin 并把你的可执行文件存在,如果你 有任何。不要给他们一个 .py 延长,即使他们是蟒蛇 来源文件。不要把任何代码 他们除了进口和呼叫 主要功能定义的其他地方 在你的项目。
  • 如果你的项目expressable作为一个单一的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 解释和 安装软件,分别 如果你感觉不错。

不要:

  • 把你的来源目录中称为 srclib.这使得它很难 运行没有安装。
  • 把你的测试以外的蟒蛇包。这使得它很难 运行测试,对已安装的 版本。
  • 创建一个包裹,只有一个 __init__.py 然后把所有你的代码转 __init__.py.只是做一个模块 而不是一个软件包,这是更简单。
  • 试着神奇黑客使蟒蛇能够导入模块 或包装不具有的用户加入 目录中包含它对他们的 进口径(通过 PYTHONPATH 或 其他一些机制)。你不会 正确地处理所有情况和用户 会得到愤怒在你的时候你的 软件不在他们的工作 环境。

其他提示

Distutils来完成 支持安装模块,包和脚本。如果创建一个distutils来完成 setup.py 这指的是 foo 作为一个软件包和 foo.py 作为一个脚本,然后 foo.py 应该得到安装的 /usr/local/bin 或任何适当的脚本中安装的路径是对的目标操作系统, foo 包应该得到安装的 site_packages 目录。

你应该打电话的可执行的只是 foo, ,不 foo.py, 然后试图进口foo不会使用它。

作为其命名为:这是难以回答的摘要;我们需要知道具体是什么它不会。例如,如果它配置和控制,呼吁它-config或ctl可能是适当的。如果它是一个壳API库,它应该有相同的名称库。

你CLI模块是一回事,包,支持它是另一回事。不要混淆的名称与模块 foo (在一个文件 foo.py)和封装 foo (在一个目录 foo 与文件 __init__.py).

你有两样东西叫 foo:一个模块和软件包。还有什么你想要的名字 foo?一级?一种功能?一个变量?

挑选一个独特的名称foo模块或foo包。 foolib, 例如,是一个受欢迎的软件包的名称。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top