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.
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.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
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'] }, )
Partager