J'ai deux systèmes Ubuntu 18.04.1 LTS:
Remarque: Toutes les choses dans les deux systèmes ont été installées avec APT (from deb - packages) . Je n'ai pas utilisé pip
/pip3
, make install
, checkinstall
et d'autres utilitaires similaires. Donc, c'est absolument sur le sujet. C'est Ubuntu, Ubuntu utilise APT.
Le premier système contient les fichiers pyc
- suivants:
/usr/lib/python2.7/dist-packages/gi/overrides/Dee.pyc
/usr/lib/python3/dist-packages/gi/overrides/__pycache__/Dee.cpython-36.pyc
/usr/lib/python2.7/dist-packages/gi/overrides/Unity.pyc
/usr/lib/python3/dist-packages/gi/overrides/__pycache__/Unity.cpython-36.pyc
Le second système n'a pas ces fichiers.
Je ne trouve pas de paquet pour ces fichiers avec dpkg -S
. Mais je peux trouver des scripts (*.py
).
Pour autant que je puisse comprendre, ces fichiers proviennent de gir1.2-dee-1.0
et gir1.2-unity-5.0
.
Mais après la réinstallation de ces paquetages, les fichiers *.pyc
ne sont pas créés.
Qu'est-ce qui ne va pas?
Comment obtenir *.pyc
à leur place? Mon système fonctionnera-t-il normalement sans ces fichiers?
J'attends pour APT
Ce n'est pas lié à APT donc ça va prendre du temps ;-)
Qu'est-ce qui ne va pas?
Rien.
Comment obtenir * .pyc à leur place?
Si vous le voulez vraiment, vous pouvez le faire manuellement avec py_compile . A partir de la ligne de commande python (remplacez {pyfile.py} par celui que vous voulez compiler):
>>> import py_compile
>>> py_compile.compile('{pyfile.py}')
Il existe également une méthode en ligne de commande qui permet de compiler le tout dans un répertoire avec ...
python -m compileall .
Cependant, il n’est pas vraiment nécessaire de le faire: ils sont créés à mesure que vous utilisez un logiciel sur votre machine . C'est aussi pourquoi cela n'a aucun rapport avec APT.
Mon système fonctionnera-t-il normalement sans ces fichiers?
Oui.
Que se passe-t-il réellement: lorsqu'un module est importé ou que la source a été modifiée, un fichier .pyc
contenant le code compilé sera créé dans le même répertoire que le .py file
. Ce fichier est utilisé pour ignorer l'étape de compilation pour ce module. Réduit de quelques millisecondes l'exécution (ce qui n'est pas important pour des utilisations normales, mais imaginons un serveur Web appelant le même script plusieurs milliers de fois en quelques secondes. Ces millisecondes deviennent soudainement importantes).
Concernant le fait de ne pas voir un fichier .pyc
quelque part:
Il arrive parfois que python ne puisse pas compiler. Un exemple serait si vous utilisez un deuxième utilisateur qui n'est pas autorisé à créer un fichier à l'emplacement où la compilation sera stockée. L'exécution ne s'arrêtera pas et utilisera ensuite le source (et non la version compilée) (L'exécution d'un script n'est pas considérée comme une importation; cela n'est effectué que pour les modules).
Les fichiers *.pyc
contiennent Python bytecode . Ils sont créés lorsque le fichier *.py
correspondant est exécuté pour la première fois (et mis à jour lors de la première exécution après les modifications du *.py
correspondant).
Étant donné que l'interprète Python de votre ordinateur est capable de créer les fichiers *.pyc
et qu'il est bon pour les créer à la volée, , les fichiers *.pyc
ne sont pas inclus dans le APT référentiels. Ils sont simplement générés sur votre ordinateur à partir des fichiers *.py
correspondants, qui sont inclus.
Par conséquent, la machine utilisée depuis plus longtemps et ayant exécuté plus d'applications contiendra probablement plus de fichiers *.pyc
qu'une installation en mode système propre, à moins que vous ne nettoyiez ces fichiers.
Voir également: