Затмение удаляет записи из глобального easy_install.pth? - PullRequest
1 голос
/ 09 декабря 2011

У нас есть некоторые досадные проблемы с Eclipse, которые, видимо, всегда были там, в Windows 7 + пользовательская установка на python + Eclipse 3.7 и последняя версия Pydev.

Проблема в основном в том, что если при настройке интерпретатора Python вы также добавляете все библиотеки, то Eclipse или Pydev или кто знает, что удаляет все эти записи из глобального файла easy_install.pth, которые также настроен в Pydev. Это означает, что в Eclipse все работает нормально, но все, что находится за его пределами, не может работать правильно.

Теперь мне трудно поверить, что никто не заметил, поэтому я думаю, что мы делаем что-то не так.

Я также исправил ошибку, которая еще не привлекла большого внимания:

https://sourceforge.net/tracker/?func=detail&aid=3446052&group_id=85796&atid=577329

Есть идеи, что и почему это может быть? Вы уже можете точно знать, кто и когда изменяет этот файл, какой-либо из предложенных инструментов?

EDIT: Я пытаюсь с Process Monitor, как предложено ниже. Итак, я запускаю Eclipse, запускаю простую команду Python и получаю что-то похожее на этот файл.

«Время файла», «Всего событий», «Открытия», «Закрытие», «Чтение», «Запись», «Чтение байтов», «Запись байтов», «Получение ACL», «Установка ACL», « Другой»,„Путь“ "0.0000306", "4", "1", "1", "0", "0", "0", "0", "0", "0", "2", "C: \ Python25 \ Lib \ сайт-пакеты \ простой install.pth "

Так что в основном это было открыто: 1, закрыто: 1, другое: 2. И файл был фактически изменен.

У меня сложилось впечатление, что Eclipse просто тупо перезаписывает файл, иначе должны быть и некоторые операции чтения, верно?

Это, однако, не очень мне помогает, я могу видеть только Eclipse как процесс, изменяющий файл, не намного больше.

Ответы [ 3 ]

3 голосов
/ 13 декабря 2011

Хорошо, я должен сказать, что до сих пор не смог воспроизвести это в PyDev ... Знаете ли вы, что это происходит только на вашей машине (или у какого-то другого коллеги тоже есть такая же проблема)?

Чтобы попытаться воспроизвести его, не могли бы вы рассказать подробнее о своей цепочке инструментов: какая у вас версия Python и какая у вас версия setuptools?Какие пакеты вы установили?(я чувствую, что виновником на самом деле является не Eclipse / PyDev, а какой-то пакет python, который делает это).

Просто заметьте, что PyDev просто не делает ничего, связанного с файлами .pth - все, что он делаетзапускает ваш скрипт на python с настройкой PYTHONPATH в переменных среды для запускаемого процесса (поэтому очень маловероятно, что PyDev пишет этот файл - просто потому, что он ничего не знает о файлах .pth).

Одна вещь, которая может помочь добраться до его корня: вы можете попробовать сделать этот файл недоступным для записи (вы должны иметь возможность изменить его разрешения, чтобы вы не могли его изменить), затем попытаться воспроизвести и посмотреть, если выгде-то получится какая-то ошибка (потому что если кто-то попытается ее написать, возникнет исключение, потому что у вас нет прав на это).

2 голосов
/ 09 декабря 2011

Поскольку вы работаете в Windows, почему бы не использовать Process Monitor ? Включите его, отфильтруйте ваши файлы и установите. Он будет регистрировать, кто касается файла, и в какой последовательности. Это должно найти вашего виновника.

0 голосов
/ 15 декабря 2011

Я действительно не нашел решения для настоящей проблемы, но, по крайней мере, я нашел обходной путь.

Теперь я сохраняю в текстовом файле все имена яиц, которые должны быть в sys.path во время выполнения. Прежде чем делать что-либо еще, я беру этот список, соединяю эти пути с правильным путем к пакетам сайта и добавляю то, что отсутствовало, в sys.path.

Кажется, что это работает, но если я удаляю некоторые библиотеки (например, pyqt), даже если они добавлены, я все равно получаю ошибки som, так что все еще чего-то не хватает ...

    import pkg_resources
    import sys

    from distutils.sysconfig import get_python_lib
    from os import path
    from psi.devsonly.utils import filename_to_list


    #TODO: there appears to be an issue with QT removing the entries
    def update_sys_path():
        """Make sure that the sys path contains all the entries needed
        """
        site_packages = get_python_lib()
        req = pkg_resources.Requirement.parse('psi.devsonly')
        wea = pkg_resources.resource_filename(req, 'windows_easy_install.pth')
        ppack_list = filename_to_list(wea)

        for p in ppack_list:
            full_name = path.join(site_packages, p)
            # the lower() is necessary or the entries are not found
            if full_name.lower() not in sys.path:
                print("adding to the path the entry %s" % full_name)
                sys.path.insert(0, full_name)
            else:
                print("%s already present in the path" % full_name)
...