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

使用命令行脚本打包python程序,python,command-line,release,packaging,Python,Command Line,Release,Packaging,我一直在努力让我的宠物Python项目进入可发布状态,但在打包时,我遇到了麻烦 我不明白的是,如果我有一个运行脚本,即一个可执行的命令行程序,比如foo,并且我的项目的名称是foo,那么我应该如何命名内部包目录 举个具体的例子,如果我有 README.md LICENSE somefile1.py somefile2.py foo 包装这个最好的方法是什么 比如说 +--README.md | +--LICENSE | +--foo | +--foo/ | +--somefi

我一直在努力让我的宠物Python项目进入可发布状态,但在打包时,我遇到了麻烦

我不明白的是,如果我有一个运行脚本,即一个可执行的命令行程序,比如foo,并且我的项目的名称是foo,那么我应该如何命名内部包目录

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

README.md
LICENSE
somefile1.py
somefile2.py
foo
包装这个最好的方法是什么

比如说

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

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

您做错了…

下面是结构“应该”的样子

foo 1.0/
| +--README.txt
| +--setup.py
| +--foo/__init__.py
| +--foo/iri2uri.py
| +--foo/httplib2/__init__.py
| +--foo/httplib2/bar.py
将外部的封闭文件夹视为包。这应该包括安装和文档文件许可证、自述文件、清单、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)导入必要的模块。

Woah!在我写答案时,你的问题发生了巨大的变化。要点是,外部文件夹的名称无关紧要;这只是包裹的名字。内部文件夹很重要,因为它是您正在安装的模块的名称。很抱歉,如果这让人困惑,Piligrim的示例与我的布局不同。我刚刚再次更新了问题,希望能澄清问题。应该就是这样。如果您熟悉Linux,您将了解/lib和/bin目录的使用/lib是希望导入到其他应用程序中的代码所在的位置/bin是独立应用程序所在的位置。如果你想安装一个独立的应用程序,你需要另一个软件包来处理安装到正确的位置。
examples/
| +--/foo.py