Мы работаем с хранилищем кода, которое развернуто как в Windows, так и в Linux - иногда в разных каталогах. Как один из модулей внутри проекта должен ссылаться на один из не-Python-ресурсов в проекте (файлы CSV и т. Д.)?
Если мы сделаем что-то вроде:
thefile=open('test.csv')
или:
thefile=open('../somedirectory/test.csv')
Он будет работать только тогда, когда скрипт запускается из одного определенного каталога или подмножества каталогов.
То, что я хотел бы сделать, это что-то вроде:
path=getBasePathOfProject()+'/somedirectory/test.csv'
thefile=open(path)
Является ли это возможным?
python
path
relative-path
olamundo
источник
источник
__file__
), '..', '..', 'resources')os.pardir
немного лучше, чем'..'
, хотя оба они эквивалентны как для POSIX, так и для Windows.Если вы используете инструменты установки или распространяете (установка setup.py), тогда «правильный» способ получить доступ к этим упакованным ресурсам - использовать package_resources.
В вашем случае пример будет
Который, конечно, читает ресурс, и считанные двоичные данные будут значением my_data
Если вам просто нужно имя файла, вы также можете использовать
Пример:
Преимущество заключается в том, что он гарантированно работает, даже если это архивное распространение, как яйцо.
См. Http://packages.python.org/distribute/pkg_resources.html#resourcemanager-api.
источник
__file__
как в старые добрые времена?В Python пути указаны относительно текущего рабочего каталога , который в большинстве случаев является каталогом, из которого вы запускаете вашу программу. Текущий рабочий каталог , скорее всего , не так же , как и в директории вашего файла модуля, поэтому , используя путь относительно текущего файла модуля всегда является плохим выбором.
Использование абсолютного пути должно быть лучшим решением:
источник
Я часто использую что-то похожее на это:
Переменная
содержит имя файла сценария, в котором вы пишете этот код, так что вы можете создавать пути относительно сценария, но все же записывать с абсолютными путями. Это работает довольно хорошо по нескольким причинам:
Но вам нужно следить за совместимостью платформы - Windows os.pathsep отличается от UNIX.
источник
Вы также пытаетесь нормализовать свое
cwd
использованиеos.path.abspath(os.getcwd())
. Больше информации здесь .источник
cwd
путь модуля, тем не менееВы можете использовать
__file__
переменную build in . Содержит путь к текущему файлу. Я бы реализовал getBaseOfProject в модуле в корне вашего проекта. Там я бы получил часть пути__file__
и вернул бы это. Этот метод может быть использован везде в вашем проекте.источник
Я немного озадачен здесь. Хотел упаковать некоторые файлы ресурсов в файл wheel и получить к ним доступ. Выполнял упаковку, используя файл манифеста, но pip install не устанавливал его, если это не был подкаталог. Надеемся, что эти снимки помогут
MANIFEST.in
Создал weel используя стандартный setup.py. Пип установил файл колеса. После установки проверил, установлены ли ресурсы. Они есть
В tfclient.py для доступа к этим файлам. из
И это работает.
источник
Я потратил много времени на то, чтобы найти ответ на этот вопрос, но, наконец, я его получил (и это действительно очень просто):
Это добавит относительный путь вашей подпапки в каталоги для Python, чтобы посмотреть в Это довольно быстро и грязно, но это работает как шарм :)
источник
open('your/subfolder/of/choice')
любом случае.