Setuptools / distutils: установка файлов в каталог DLL дистрибутива в Windows - PullRequest
4 голосов
/ 24 сентября 2011

Я пишу setup.py, который использует setuptools / distutils для установки написанного мной пакета python. Необходимо установить два DLL-файла (на самом деле DLL-файл и PYD-файл) в место, доступное для загрузки Python. Думал, что это каталог DLLs в каталоге установки в моем дистрибутиве Python (например, c:\Python27\DLLs).

Я использовал опцию data_files для установки этих файлов и все работало при использовании pip:

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

Но, используя easy_install, я получаю следующую ошибку:

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.

Итак, как правильно установить эти файлы?

1 Ответ

1 голос
/ 26 сентября 2011

Мне удалось решить эту проблему, внеся следующие изменения:
1. Путь ко всем data_files изменен на относительный

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

2. Я пытаюсь найти местоположение «myhomye» в файле инициализации пакета, чтобы иметь возможность использовать их. Это требует некоторого неприятного кода, потому что они находятся либо в текущем корневом каталоге Python, либо в каталоге egg, выделенном для пакета. Поэтому я просто смотрю, где находится каталог.

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. Затем мне нужно добавить этот каталог в путь, поэтому мои модули будут загружены оттуда.

sys.path.append(myhome) 
...