Несоответствие системного атрибута python __file__ в разных дистрибутивах Linux

Я имею дело со странной проблемой. Рассмотрим этот простой код:

print(__file__)
print("***" + os.path.dirname(__file__) + "###")

теперь, когда я запускаю этот код на своем ноутбуке, где у меня есть ОС Fedora 23, вывод:

/home/.../ExperimentalSystem/BullshitSetupGenerator.py
***/home/.../ExperimentalSystem###

запуск того же кода в Ubuntu 15.10:

BullshitSetupGenerator_delete_me.py
***###

кто-нибудь может объяснить мне, почему? Я что-то упускаю?


person Snurka Bill    schedule 07.04.2016    source источник
comment
В функции dirname нет противоречий. Несоответствие в __file__   -  person wim    schedule 07.04.2016
comment
Это несоответствие с dirname или с __file__? Мое предположение было бы последним. Вы запускаете код с одним и тем же относительным путем в обоих местах? И, наконец, чтобы получить согласованное поведение, я полагаю, вы могли бы использовать os.path.dirname(os.path.abspath(__file__))   -  person mgilson    schedule 07.04.2016
comment
это с файлом, верно.   -  person Snurka Bill    schedule 07.04.2016


Ответы (2)


Вероятно, вы не хотите полностью полагаться на атрибут __file__, но убедитесь, что у вас есть полный путь abspath:

os.path.dirname(os.path.abspath(__file__))
person AChampion    schedule 07.04.2016

__file__ определяется аргументом, переданным Python, который сообщает ему, что представляет собой ваш файл. Например, предположим, что вы находитесь в папке с именем Here. Можно сказать python ../Here/here.py, а __file__ будет ../Here/here.py. Если вы запустили тот же файл только с python here.py, __file__ будет here.py. Когда вы запускаете файл Python в том же каталоге, не используя ни абсолютный путь, ни странный относительный путь, в файле не будет упомянуто ни одного каталога. Это означает, что os.dirname(__file__) будет пустым. Если хотите, вы можете получить абсолютный путь с помощью os.path.abspath()< /а>.

person zondo    schedule 07.04.2016