IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Setup.py échoue - fichier en lecture seule


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Inscrit en
    Novembre 2013
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Novembre 2013
    Messages : 2
    Par défaut Setup.py échoue - fichier en lecture seule
    Bonjour,

    J'ai un problème avec l'installation d'un package que je dois maintenir. Le fichier setup.py a été rédigé par quelqu'un d'autre et je suis pas très avancé en Python.

    Le problème survient quand les fichiers à installer sont en lecture seule. Le code du fichier setup.py retire l'attribut lecture seule des fichiers correctement, mais le fichier généré par l'installation "package-cmd.py" demeure en lecture seule.

    La première fois que l'on éxécute l'installation, cela fonctionne, mais une erreur survient lorsqu'il tente d'effacer le contenu du répertoire build, puisque le fichier build\bdist.win32\egg\EGG-INFO\scripts\package-cmd.py est en lecture seule.

    creating 'dist\package-1.2.4-py2.7.egg' and adding 'build\bdist.win32\egg' to it
    removing 'build\bdist.win32\egg' (and everything under it)
    error removing build\bdist.win32\egg: build\bdist.win32\egg\EGG-INFO\scripts\package-cmd.py: Access is denied
    error removing build\bdist.win32\egg: build\bdist.win32\egg\EGG-INFO\scripts: The directory is not empty
    error removing build\bdist.win32\egg: build\bdist.win32\egg\EGG-INFO: The directory is not empty
    error removing build\bdist.win32\egg: build\bdist.win32\egg: The directory is not empty
    Si on tente de réinstaller le package un jour (parce qu'on l'a désinstallé ou autre raison) alors que le dossier "build" est présent (d'une installaton précédente), l'installation échoue complètement en donnant l'erreur : "error: could not delete 'build\scripts-2.7\package-cmd.py': Access is denied". Il n'a pas pu remplacer le fichier car il est en lecture seule.

    Idéalement, j'aimerais que le setup.py me génère un fichier package-cmd.py qui n'est pas en lecture seule. Retirer l'attribut "lecture seule" sur les fichiers originaux d'installation fonctionne, mais ce n'est pas une option, puisque cet attribut est géré par une instance Perforce.

    Voici le code du setup.py. Est-ce qu'il y a quelque chose que je peux modifier pour modifier l'attribut lecture seule du fichier généré?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
     
    from setuptools import setup
    from distutils.command.install import INSTALL_SCHEMES
    from distutils.command.install_data import install_data as _install_data
    import os
    import sys
     
    # remove read-only from data files
    class install_data(_install_data):  
    def copy_file(self, infile, outfile,
                  preserve_mode=0, preserve_times=1, link=None, level=1):
        return _install_data.copy_file(self,infile, outfile, preserve_mode=0, preserve_times=1, link=None, level=1)
     
    def fullsplit(path, result=None):
    """
    Split a pathname into components (the opposite of os.path.join) in a
    platform-neutral way.
    """
    if result is None:
        result = []
    head, tail = os.path.split(path)
    if head == '':
        return [tail] + result
    if head == path:
        return result
    return fullsplit(head, [tail] + result)
     
    # Tell distutils to put the data_files in platform-specific installation
    # locations. See here for an explanation:
    #       
    for scheme in INSTALL_SCHEMES.values():
    scheme['data'] = scheme['purelib']
     
    # Compile the list of packages available, because distutils doesn't have
    # an easy way to do this.
    packages, data_files = [], []
    root_dir = os.path.dirname(__file__)
    if root_dir != '':
    os.chdir(root_dir)
    tool_dir = 'package_name'
     
    # install
    for dirpath, dirnames, filenames in os.walk(tool_dir):
    # Ignore dirnames that start with '.'
    for i, dirname in enumerate(dirnames):
        if dirname.startswith('.'): del dirnames[i]
    if '__init__.py' in filenames:
        packages.append('.'.join(fullsplit(dirpath)))
        for f in filenames:
            if not f.endswith('.py'):
                data_files.append([dirpath, [os.path.join(dirpath,f)]])
    elif filenames:
        data_files.append([dirpath, [os.path.join(dirpath, f) for f in filenames]])
     
    #setup
     
     
    setup(
    name = "Package_name",
    version = '1.2.4',
    cmdclass = {
        'install_data' : install_data,
    },
    packages = packages,
    data_files = data_files,
    scripts = ['scripts/package-cmd.py'],
    entry_points = {
      'console_scripts' : ['package = package:execute_from_command_line']
    },
    )

  2. #2
    Expert confirmé

    Avatar de deusyss
    Homme Profil pro
    Expert Python
    Inscrit en
    Mars 2010
    Messages
    1 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Expert Python
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 659
    Par défaut
    Bonjour,

    Je pense que le probleme n'est pas du coté du code mais plutot du user utilisé pour l'exécuter.

    Essaie en mode root. Ainsi tu possèdera tous les droits d'accès sur les fichiers et cela devrait passer je pense.

  3. #3
    Candidat au Club
    Inscrit en
    Novembre 2013
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Novembre 2013
    Messages : 2
    Par défaut
    Je viens de vérifier et mon user est dans le groupe Administrateur (sous windows). Je suis capable d'effacer le fichier en question lorsque je le fais sous windows explorer.

    Lorsque je fais mon "python setup.py install", est-ce qu'il y a moyen de forcer la commande à rouler en tant qu'admin ou quelque chose dans ce style?

    EDIT: J'ai mis la commande dans un batch file, fais un clique-droit dessus et sélectionné "run as administrator", sans changement.

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 290
    Par défaut
    Bonjour,

    Commencez par vous renseigner sur distutils.command.install_data.install_data.copy_file, en particulier l'attribut preserve_mode.

    Ce code me laisse perplexe... vous avez essayé de virer toute la partie "customisée" ?

    nan mais WTF... le forum Haskell, c'est pas ici

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    def fullsplit(path, result=None):
    """
    Split a pathname into components (the opposite of os.path.join) in a
    platform-neutral way.
    """
    if result is None:
        result = []
    head, tail = os.path.split(path)
    if head == '':
        return [tail] + result
    if head == path:
        return result
    return fullsplit(head, [tail] + result)
    ps : l'indentation du code posté est mal passée, c'est pénible...

Discussions similaires

  1. effacer un fichier en lecture seule
    Par balha dans le forum C++
    Réponses: 5
    Dernier message: 15/12/2005, 16h57
  2. Modifier ou supprimer fichier en lecture seule
    Par axel-erator dans le forum Langage
    Réponses: 2
    Dernier message: 01/12/2005, 17h57
  3. Réponses: 8
    Dernier message: 09/08/2005, 11h44
  4. Réponses: 7
    Dernier message: 05/08/2005, 16h32
  5. [PDE] Editeur de fichiers en lecture seule
    Par simsky dans le forum Eclipse Java
    Réponses: 7
    Dernier message: 13/07/2005, 12h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo