Depuis que la question est devenue très populaire, voici les étapes de diagnostic pour aller à travers lorsque vous êtes absent de fichiers après l'installation. Imaginez avoir un exemple de projet avec la structure suivante:
root
├── spam
│ ├── __init__.py
│ ├── data.txt
│ ├── eggs.py
│ └── fizz
│ ├── __init__.py
│ └── buzz.py
├── bacon.py
└── setup.py
Maintenant je gère pip install .
, vérifiez que le paquet est installé:
$ pip list
Package Version
---------- -------
mypkg 0.1
pip 19.0.1
setuptools 40.6.3
wheel 0.32.3
mais voir ni spam
ni spam/eggs.py
ni bacon.py
ni spam/fizz/buzz.py
dans la liste des fichiers appartenant au paquet installé:
$ pip show -f mypkg
Name: mypkg
Version: 0.1
...
Files:
mypkg-0.1.dist-info/DESCRIPTION.rst
mypkg-0.1.dist-info/INSTALLER
mypkg-0.1.dist-info/METADATA
mypkg-0.1.dist-info/RECORD
mypkg-0.1.dist-info/WHEEL
mypkg-0.1.dist-info/metadata.json
mypkg-0.1.dist-info/top_level.txt
Alors, que faire maintenant?
Le diagnostic par l'inspection de la roue journal de l'
Sauf a dit de ne pas le faire, pip
toujours essayer de construire une roue de fichier et l'installer sur votre paquet d'elle. Nous pouvons inspecter le journal de la roue processus de construction si la réinstallation dans le mode verbose. La première étape consiste à désinstaller le package:
$ pip uninstall -y mypkg
...
puis l'installer à nouveau, mais maintenant, avec un argument supplémentaire:
$ pip install . -vvv
...
Maintenant, si je inspecter le journal:
$ pip install . -vvv | grep 'adding'
adding 'mypkg-0.1.dist-info/METADATA'
adding 'mypkg-0.1.dist-info/WHEEL'
adding 'mypkg-0.1.dist-info/top_level.txt'
adding 'mypkg-0.1.dist-info/RECORD'
Je remarque qu'aucun des fichiers à partir de l' spam
répertoire ou bacon.py
sont mentionnés nulle part. Cela signifie qu'ils n'étaient tout simplement pas inclus dans la roue de fichier et donc il n'est pas installé par pip
. L'erreur la plus fréquente de sources sont:
Les paquets manquants: vérifier l' packages
argument
Vérifiez que vous avez passé l' packages
argument à la fonction de configuration. Vérifiez que vous avez mentionné tous les paquets qui doivent être installés. Des sous-paquets ne seront pas collectées automatiquement si seulement le package parent est mentionné! Par exemple, dans le script d'installation
from setuptools import setup
setup(
name='mypkg',
version='0.1',
packages=['spam']
)
spam
seront installées, mais pas spam.fizz
parce que c'est un package lui-même et doit être mentionné explicitement. En le fixant:
from setuptools import setup
setup(
name='mypkg',
version='0.1',
packages=['spam', 'spam.fizz']
)
Si vous avez beaucoup de paquets, utilisez setuptools.find_packages
pour automatiser le processus:
from setuptools import find_packages, setup
setup(
name='mypkg',
version='0.1',
packages=find_packages() # will return a list ['spam', 'spam.fizz']
)
Dans le cas où il vous manque un module:
Les modules manquants: vérifier l' py_modules
argument
Dans les exemples ci-dessus, je vais être absent bacon.py
après l'installation, car il n'appartient pas à un paquet. - Je fournir ses nom du module dans l'argument séparé py_modules
:
from setuptools import find_packages, setup
setup(
name='mypkg',
version='0.1',
packages=find_packages(),
py_modules=['bacon']
)
Manquant de fichiers de données: vérifier l' package_data
argument
J'ai tous les fichiers de code source maintenant en place, mais l' data.txt
le fichier n'est pas encore installé. Les fichiers de données situé sous répertoires de paquets doivent être ajoutés par le biais de l' package_data
argument. La fixation de la configuration ci-dessus script:
from setuptools import find_packages, setup
setup(
name='mypkg',
version='0.1',
packages=find_packages(),
package_data={'spam': ['data.txt']},
py_modules=['bacon']
)
Ne soyez pas tenté d'utiliser l' data_files
argument. Placez les fichiers de données sous un paquet et configurer package_data
à la place.
Après fixation du script d'installation, vérifiez que les paquets sont en place après l'installation
Si j'ai maintenant réinstaller le paquet, j'ai remarquerez que tous les fichiers sont ajoutés à la roue:
$ pip install . -vvv | grep 'adding'
adding 'bacon.py'
adding 'spam/__init__.py'
adding 'spam/data.txt'
adding 'spam/eggs.py'
adding 'spam/fizz/__init__.py'
adding 'spam/fizz/buzz.py'
adding 'mypkg-0.1.dist-info/METADATA'
adding 'mypkg-0.1.dist-info/WHEEL'
adding 'mypkg-0.1.dist-info/top_level.txt'
adding 'mypkg-0.1.dist-info/RECORD'
Ils seront également visibles dans la liste des fichiers appartenant à d' mypkg
:
$ pip show -f mypkg
Name: mypkg
Version: 0.1
...
Files:
__pycache__/bacon.cpython-36.pyc
bacon.py
mypkg-0.1.dist-info/INSTALLER
mypkg-0.1.dist-info/METADATA
mypkg-0.1.dist-info/RECORD
mypkg-0.1.dist-info/WHEEL
mypkg-0.1.dist-info/top_level.txt
spam/__init__.py
spam/__pycache__/__init__.cpython-36.pyc
spam/__pycache__/eggs.cpython-36.pyc
spam/data.txt
spam/eggs.py
spam/fizz/__init__.py
spam/fizz/__pycache__/__init__.cpython-36.pyc
spam/fizz/__pycache__/buzz.cpython-36.pyc
spam/fizz/buzz.py