使用命令行脚本打包python程序

时间:2012-04-14 01:49:08

标签: python command-line release packaging

我试图让我的宠物Python项目进入可释放的状态,而且在打包它时我感到很难过。

Mark Pilgrim recommend this directory structure in Dive Into Python

httplib2/                 
|  
+--README.txt             
|  
+--setup.py               
|  
+--httplib2/              
    |  
    +--__init__.py  
    |  
    +--iri2uri.py

我无法弄清楚的是,如果我有一个跑步者脚本,即一个可执行的命令行程序,比如foo,我的项目名称是foo,我该怎么命名内部包目录?

举一个具体的例子,如果我有

README.md
LICENSE
somefile1.py
somefile2.py
foo

打包这个的最佳方法是什么?

例如

+--README.md
|
+--LICENSE
|
+--foo
|
+--foo/
    |
    +--somefile1.py
    |
    +--somefile2.py

由于名称重复而无效。

1 个答案:

答案 0 :(得分:3)

你做错了......

这就是“应该”结构的样子

foo 1.0/
| +--README.txt
| +--setup.py
| +--foo/__init__.py
| +--foo/iri2uri.py
| +--foo/httplib2/__init__.py
| +--foo/httplib2/bar.py

将外部封闭文件夹视为包。这应包括安装和文档文件LICENSE,README,MANIFEST,setup.py。包中的文件夹(在这种情况下,只是'/ foo')是模块。

要访问上述所有功能,您需要使用以下导入语句:

import foo                # represented by foo/__init__.py
import foo.iri2uri        # represented by foo/iri2uri.py
import foo.httplib2       # represented by foo/httplib2/__init__.py
import foo.httplib2.bar   # represented by foo/httplib/bar.py

从技术上讲,您可以选择将子模块包含为文件或文件夹。只有子模块的子模块才需要文件夹。

例如:

foo 1.0/
| +--/foo/iri2uri.py
| +--/foo/iri2uri/__init__.py

两者都将以同样的方式解释。

例如:

import foo.iri2uri

起初这有点棘手但是每个曾经安装过安装包的人都遇到过这种减速带。

更新:我认为这可以更好地回答您的问题

对于可执行文件,您可以创建单独的包

不需要安装程序,因为其他应用程序不会导入此代码。

examples/
| +--/foo.py

它们应该作为独立程序运行,并从您安装的库(foo)中导入必要的模块。