Quand je cours
python setup.py sdist
cela crée un sdist dans mon ./dist Directory. Cela inclut un fichier "projet-egg.info" dans la fermeture à glissière dans mon dossier "dist", que je n'utilise pas, mais ça ne me fait pas mal, alors je l'ignore.
Ma question est pourquoi -aussi Créer un dossier "Project-EGG.info" dans mon répertoire racine de projet? Puis-je le faire arrêter de créer ceci? Sinon, puis-je simplement le supprimer immédiatement après avoir créé le SDist?
J'utilise la fonction "Configuration" importée de SourissoTools. WindowsXP, Python2.7, SeugoTools 0.6C11, Distribuez 0.6.14.
Ma configuration de configuration ressemble à:
{'author': 'Jonathan Hartley',
'author_email': '[email protected]',
'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}
Ce répertoire est créé intentionnellement dans le cadre du processus de construction d'une distribution source. Un peu de glandes au Guide du développeur pour seugoTools vous donne un indice pourquoi:
Mais assurez-vous d'ignorer toute partie de la documentation des distutilles qui traite du manifeste ou de la manière dont elle est générée à partir de manifeste.in; SeugoTools vous protège de ces problèmes et ne fonctionne pas de la même manière. Contrairement aux distutils, SetUpoTools régénère le fichier manifeste de la distribution source chaque fois que vous créez une distribution de source, et il le construit à l'intérieur du répertoire du projet .EGG-info, en dehors de votre répertoire de projet principal. Vous n'avez donc pas besoin de ne pas vous inquiéter de savoir s'il est à jour ou non.
Vous pouvez supprimer en toute sécurité le répertoire une fois votre construction terminée.
Bonus Modifier:
Je personnalise la commande clean
dans mon setup.py
sur beaucoup de my Python projets à supprimer *.Egg-info
, dist
, build
, et *.pyc
et autres fichiers. Voici un exemple de la façon dont cela se fait dans setup.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,
}
)
Illustrer, après avoir exécuté python setup.py build
sur un projet factice appelé "Poop" (oui, je suis très mature), cela se produit:
$ 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
Et maintenant si nous courons 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'
Tada!
Les -Egg.info
Dossier n'est pas toujours un artefact temporaire que vous pouvez supprimer.
Par exemple, si vous utilisez pip install -e YOURPACKAGE
Pour une installation "modifiable" (fonctionne via Symlink comme python setup.py develop
Vous n'avez donc pas à ré-installer un package à chaque fois que vous le modifiez localement), le -Egg.info
Dossier est requis au moment de l'exécution lorsque votre colis est importé dans une autre source. Si cela n'existe pas, vous obtiendrez une erreur DistributionNotFound
.
Notez que vous pouvez avoir le PROJECT.Egg-info
Les artefacts disparaissent complètement de votre sdist.
La commande setup.py Egg_info
utilisera la racine de source comme base d'œufs par défaut, ce qui permettra à la PROJECT.Egg-info
répertoire étant emballé dans le SDist.
Vous pouvez configurer l'oeuf de base en passant l'option --Egg-base
. Cela créera le PROJECT.Egg-info
Annuaire ailleurs, le laissant hors de votre distribution source complètement. Vous pouvez également utiliser un setup.cfg
Pour définir cette propriété.
La commande suivante pour créer un sdist sans PROJECT.Egg-info
travaille pour moi:
python setup.py Egg_info --Egg-base /tmp sdist
Ou dans un setup.cfg
:
[Egg_info]
Egg_base = /tmp
Les pythes emballage et le système de construction sont cassés IMHO. Donc, il y a beaucoup de hacks et de solutions de contournement pour les choses que l'on voudrait bien travailler de la boîte.
Cependant, le piratage "plus propre" que j'ai trouvé pour supprimer le * .Egg-info utilise la normale clean --all
commutateur avec le Egg_info
Pour placer le fichier * .EGG-info dans un sous-dossier qui sera nettoyé par la commande Netty. Voici un exemple:
Dans ton setup.cfg
Utilisez quelque chose comme ceci:
[Egg_info]
Egg_base = ./build/lib
où ./build/lib
est un dossier que clean --all
supprimera. Ensuite, lorsque vous construisez votre projet avec SetOpTools, utilisez la commande propre avec le drapeau --all, par exemple.
python setup.py bdist_wheel clean --all
si vous souhaitez construire un ensemble source également, assurez-vous de construire BDist_wheel avant SDist, le dossier Build/Lib existe, E.G.:
python setup.py bdist_wheel sdist clean --all