代码之家  ›  专栏  ›  技术社区  ›  Jonathan Hartley Zombie

为什么“蟒蛇”设置.pysdist“创建不需要的”项目-鸡蛋信息“在项目根目录中?

  •  41
  • Jonathan Hartley Zombie  · 技术社区  · 14 年前

      python setup.py sdist
    

    它在my./dist目录中创建一个sdist。这包括一个“项目”-鸡蛋信息在我的“dist”文件夹的zip文件,我不使用,但它不会伤害我,所以我只是忽略它。

    我的问题是为什么

    我正在使用从setuptools导入的“setup”函数。 WindowsXP、Python2.7、Setuptools 0.6c11、Distribute 0.6.14。

    我的安装配置如下所示:

    {'author': 'Jonathan Hartley',
     'author_email': 'tartley@tartley.com',
     'classifiers': ['Development Status :: 1 - Planning',
                     'Intended Audience :: Developers',
                     'License :: OSI Approved :: BSD License',
                     'Operating System :: Microsoft :: Windows',
                     'Programming Language :: Python :: 2.7'],
     'console': [{'script': 'demo.py'}],
     'data_files': [('Microsoft.VC90.CRT',
                     ['..\\lib\\Microsoft.VC90.CRT\\Microsoft.VC90.CRT.manifest',
                      '..\\lib\\Microsoft.VC90.CRT\\msvcr90.dll'])],
     'description': 'Utilities for games and OpenGL graphics, built around Pyglet.\n',
     'keywords': '',
     'license': 'BSD',
     'long_description': "blah blah blah",
     'name': 'pygpen',
     'options': {'py2exe': {'ascii': True,
                            'bundle_files': 1,
                            'dist_dir': 'dist/pygpen-0.1-windows',
                            'dll_excludes': [],
                            'excludes': ['_imaging_gif',
                                         '_scproxy',
                                         'clr',
                                         'dummy.Process',
                                         'email',
                                         'email.base64mime',
                                         'email.utils',
                                         'email.Utils',
                                         'ICCProfile',
                                         'Image',
                                         'IronPythonConsole',
                                         'modes.editingmodes',
                                         'startup',
                                         'System',
                                         'System.Windows.Forms.Clipboard',
                                         '_hashlib',
                                         '_imaging',
                                         '_multiprocessing',
                                         '_ssl',
                                         '_socket',
                                         'bz2',
                                         'pyexpat',
                                         'pyreadline',
                                         'select',
                                         'win32api',
                                         'win32pipe',
                                         'calendar',
                                         'cookielib',
                                         'difflib',
                                         'doctest',
                                         'locale',
                                         'optparse',
                                         'pdb',
                                         'pickle',
                                         'pyglet.window.xlib',
                                         'pyglet.window.carbon',
                                         'pyglet.window.carbon.constants',
                                         'pyglet.window.carbon.types',
                                         'subprocess',
                                         'tarfile',
                                         'threading',
                                         'unittest',
                                         'urllib',
                                         'urllib2',
                                         'win32con',
                                         'zipfile'],
                            'optimize': 2}},
     'packages': ['pygpen'],
     'scripts': ['demo.py'],
     'url': 'http://code.google.com/p/edpath/',
     'version': '0.1',
     'zipfile': None}
    
    4 回复  |  直到 14 年前
        1
  •  62
  •   jathanism    9 年前

    此目录是作为源分发的构建过程的一部分特意创建的。有点不高兴 developer guide for setuptools 向您提示原因:

    distutils文档 或者它是如何生成的 你可以从这些问题中解脱出来,但没有用 无论如何都一样。不像 distutils,setuptools重新生成 源分发清单文件 每次你建立一个源 分配,它把它建在里面 该项目的.egg信息目录,输出 你的主要项目的方式 担心它是否是最新的 不管怎样。

    您可以在生成完成后安全地删除目录。

    奖金编辑:

    clean 我心中的命令 setup.py 在我的许多Python项目上删除 *.egg-info , dist , build ,和 *.pyc 和其他文件。下面是一个例子,它是如何在 设置.py :

    import os
    from setuptools import setup, Command
    
    class CleanCommand(Command):
        """Custom clean command to tidy up the project root."""
        user_options = []
        def initialize_options(self):
            pass
        def finalize_options(self):
            pass
        def run(self):
            os.system('rm -vrf ./build ./dist ./*.pyc ./*.tgz ./*.egg-info')
    
    # Further down when you call setup()
    setup(
        # ... Other setup options
        cmdclass={
            'clean': CleanCommand,
        }
    )
    

    python setup.py build 在一个名为“poop”(是的,我非常成熟)的虚拟项目中,会发生以下情况:

    $ python setup.py build
    running build
    running build_py
    creating build
    creating build/lib
    creating build/lib/poop
    copying poop/__init__.py -> build/lib/poop
    

    python setup.py clean

    $ python setup.py clean
    running clean
    removed `./build/lib/poop/__init__.py'
    removed directory: `./build/lib/poop'
    removed directory: `./build/lib'
    removed directory: `./build'
    

        2
  •  19
  •   Chris Johnson user3351229    7 年前

    这个 -egg.info 文件夹并不总是可以删除的临时工件。

    pip install -e YOURPACKAGE 对于“可编辑”安装(通过类似 python setup.py develop 因此,您不必每次在本地编辑包时都重新安装它) -鸡蛋信息 在运行时将包导入另一个源时需要文件夹。如果它不存在,你会得到一个 DistributionNotFound 错误。

        3
  •  15
  •   user245678    10 年前

    请注意,您可以 PROJECT.egg-info

    命令 setup.py egg_info 默认情况下,将使用源根作为蛋基,从而导致 项目.egg-信息 正在打包到sdist中的目录。

    您可以通过传递 --egg-base . 项目.egg-信息 setup.cfg

    项目.egg-信息 为我工作:

    python setup.py egg_info --egg-base /tmp sdist
    

    或者在一个 设置.cfg :

    [egg_info]
    egg_base = /tmp
    
        4
  •  5
  •   omni    6 年前

    蟒蛇的包装和建造系统被打破了。因此,有许多黑客和解决办法的事情,人们会相信工作的开箱即用。

    然而,我发现的删除*.egg信息的“最干净”的方法是使用普通的 clean --all 随行切换 egg_info 将*.egg info文件放置在将由clean命令清理的子文件夹中。举个例子:

    setup.cfg

    [egg_info]
    egg_base = ./build/lib
    

    哪里 ./build/lib 是一个文件夹 将删除。然后在使用setuptools构建项目时,使用带有--all标志的clean命令,例如。

    python setup.py bdist_wheel clean --all

    如果您也想构建一个源代码包,只需确保在sdist之前构建bdist\u wheel,这样build/lib文件夹就存在了,例如:

    python setup.py bdist_wheel sdist clean --all

    推荐文章