2010-05-02 5 views
1

Я настраиваю setup.py для distutils для модуля python, который должен быть установлен на гетерогенный набор ресурсов. Из-за неоднородности местоположение, на котором установлен модуль, не является одинаковым на каждом хосте, однако disutils выбирает местоположение для конкретного хоста.Настройка разрешений модуля python (установка установки python)

Я обнаружил, что модуль установлен без разрешений o + rx с использованием disutils (несмотря на то, что установка umask перед запуском setup.py). Одно из решений заключается в том, чтобы вручную исправить эту проблему, однако я бы хотел, чтобы автоматические средства работали на гетерогенных объектах установки.

Например, есть способ извлечь конечное местоположение установки из setup.py?

Любые другие предложения?

ответ

0

Я не очень хорошо разбираюсь в disutils, но я предполагаю, что если вы его прокопаете до тех пор, пока не найдете место, где записаны ваши файлы, вы увидите переменную пути в этой строке.

this page может помочь вам

0

os.path.dirname (__ FILE__) может быть то, что вы ищете. __file__ в модуле возвращает путь, из которого загружен модуль.

Предполагая yourmodule является папка, содержащая Something.py, в setup.py:

import os 
#setup(...) call here 
from yourmodule import Something 
print os.path.dirname(Something.__file__) 

Единственная складка с этим было бы, если ваша файловая структура имеет yourmodule в той же директории, как setuputils. В этом случае загрузчик python будет предпочтительно загружать вашмодуль. Что-то из текущего каталога.

Два несколько хак, но эффективные вариантов ниспровергать, которые могут быть либо

  1. Удалить текущий каталог с путем питона, заставляя его загрузить из файлов, которые сейчас существуют в сайте-пакетах:

    импорт SYS sys.path = sys.path [1:]

  2. Временно переименовать yourmodule папку прямо перед оператором импорта.

С опцией 1, то все дело:

import os 
import sys 

#setup(...) call here 

#Remove first entry in sys.path which is current folder (probably impl dependent, but for practical purposes is consistent) 
sys.path = sys.path[1:] 
from yourmodule import Something 
print os.path.dirname(Something.__file__) 

Я просто проверил это с одним из моих setup.py и он прекрасно работает. Удачи!

0

Я считаю, что модуль установлен без разрешений O + гх с помощью disutils

Я не помню сейчас, если Distutils копирует файлы с их правами, является или если он просто копирует содержимое ,

(несмотря на установку umask перед запуском установка.py)

Я не уверен, как следует взаимодействовать с umask и копированием файлов с Python; применяется ли umask к системным вызовам или требуется ли явное понимание кода Python?

Например, есть способ извлечь конечное местоположение установки из setup.py?

Существует один, немного свернутый. Что бы вы сделали с этой информацией?

Смежные вопросы