`setup.py sdist` 是怎样工作的?

21 投票
2 回答
40466 浏览
提问于 2025-04-15 15:19

我正在尝试使用 setup.py sdist 来制作我项目的源代码分发包。我已经有一个可以正常安装的 setup.py 文件。但是当我执行 sdist 时,我得到的结果是:在我的 my_project 文件夹里又多了一个 my_project 文件夹,还有一个我不需要的 MANIFEST 文件,以及一个包含两个文本文件的压缩包,而不是我的项目。

我哪里做错了?关于 sdist 的文档在哪里可以找到?

更新:

这是我的 setup.py 文件:

#!/usr/bin/env python

import os
from distutils.core import setup
import distutils
from general_misc import package_finder

try:
    distutils.dir_util.remove_tree('build', verbose=True)
except:
    pass

my_long_description = \
'''\
GarlicSim is a platform for writing, running and analyzing simulations. It can
handle any kind of simulation: Physics, game theory, epidemic spread,
electronics, etc.
'''

my_packages = package_finder.get_packages('', include_self=True,
                                          recursive=True)

setup(
    name='GarlicSim',
    version='0.1',
    description='A Pythonic framework for working with simulations',
    author='Ram Rachum',
    author_email='cool-rr@cool-rr.com',
    url='http://garlicsim.org',
    packages=my_packages,
    package_dir={'': '..'},
    license= "LGPL 2.1 License",
    long_description = my_long_description,

)

try:
    distutils.dir_util.remove_tree('build', verbose=True)
except:
    pass

2 个回答

8

“sdist”命令是用来创建一个软件包的“源代码”分发版本的。通常,人们会把这个命令和“upload”命令结合起来,用来通过Pypi(比如说)发布这个软件包。

11

Tarek Ziade 在这篇文章(原链接已失效原链接)中解释了这个问题,以及相关的软件打包工具,文章标题是《在Python中编写一个包》。

简单来说,它通过创建一个发布树来制作一个简单的包,这个发布树里包含了运行这个包所需的所有东西。然后,这个树会被打包成一个或多个压缩文件(通常只会生成一个压缩包)。这个压缩包实际上就是源代码树的一个副本。

撰写回答