3

我试图让我的宠物 Python 项目进入可发布状态,但在打包它时我很难过。

Mark Pilgrim 在 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

由于名称重复,无法正常工作。

4

1 回答 1

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) 中导入必要的模块。

于 2012-04-14T02:22:05.373 回答