2011-09-24 3 views
3

J'écris un setup.py qui utilise setuptools/distutils pour installer un paquet python que j'ai écrit. Il doit installer deux fichiers DLL (en fait un fichier DLL et un fichier PYD) dans l'emplacement qui est disponible pour le chargement de python. J'ai pensé que c'était le répertoire DLLs dans le répertoire d'installation de ma distribution python (par exemple c:\Python27\DLLs).Setuptools/distutils: Installation de fichiers dans le répertoire DLL de la distribution sous Windows

Je l'ai utilisé option data_files pour installer ces fichiers et tous les travaux lors de l'utilisation pip:

data_files=[(sys.prefix + "/DLLs", ["Win32/file1.pyd", "Win32/file2.dll"])] 

Mais en utilisant easy_install je reçois l'erreur suivante:

error: Setup script exited with error: SandboxViolation: open('G:\\Python27\\DLLs\\file1.pyd', 'wb') {} 
The package setup script has attempted to modify files on your system that are not within the EasyInstall build area, and has been aborted. 

Alors, quelle est la bonne façon installer ces fichiers?

Répondre

1

j'ai pu résoudre ce problème en effectuant les modifications suivantes: 1. Tous
chemin de data_files changé pour être relatif

data_files=["myhome", ["Win32/file1.pyd", "Win32/file2.dll"])] 

2. J'essaie de trouver l'emplacement de « myhomye » dans le paquet fichier init donc je serai capable de les utiliser. Cela nécessite un code méchant, car ils sont soit sous le répertoire racine de Python actuel ou sous un répertoire d'oeufs dédié au paquet. Donc, je regarde juste où un répertoire se termine.

POSSIBLE_HOME_PATH = [ 
    os.path.join(os.path.dirname(__file__), '../myhome'), 
    os.path.join(sys.prefix, 'myhome'), 
] 
for p in POSSIBLE_HOME_PATH: 
    myhome = p 
    if os.path.isdir(myhome) == False: 
     print "Could not find home at", myhome 
    else: 
     break 

3. J'ai ensuite besoin d'ajouter ce répertoire au chemin, donc mes modules seront chargés à partir de là.

sys.path.append(myhome) 
Questions connexes