Я использую проект автоматизации со следующей структурой
C:\Project_Name\Scripts
В папке сценария у меня есть модули автоматизации Python, библиотеки и другие необходимые папки данных.
Но я хочу, чтобы этот проект не ограничивался только диском C:. Я должен беспрепятственно выполнять сценарии с любого диска, из любого родительского каталога папки «Project_Name».
Я пробовал следующее. Но это всегда неверно, если я пытаюсь запустить свой тест от Дженкинса.
os.path.join(os.path.dirname(os.path.abspath(__file__)))
Подумайте об этом дереве:
Project
|
|--Scripts
| |
| |--__init__.py
| |--use_text.py
| |--text.txt
|
|--run_me.py
и представьте, что нам нужно получить путь text.txt в use_text.py
Шаг 1. в run_me.py
получите путь к каталогу проекта и сохраните его как среду, используя os. (пример:)
import os
from pathlib import Path
path = Path(__file__).parent # replace it with your preferred library's version
os.environ['PROJECT_BASE_DIR'] = str(path)
from Scripts.use_text import use
use()
теперь в use_text.py
import os
text_path = 'Scripts/text.txt'
project_path = os.getenv('PROJECT_BASE_DIR')
text_real_path = os.path.join(project_path, text_path)
def use():
# do whatever you want with text_real_path
У меня есть способ получить реальный путь к файлу независимо от того, где находится каталог проекта.
import os
os.path.join((os.path.realpath(__file__)).split("<Base Directory Name>")[0], "<relative path till the file>")
это тоже сработало с простым путем.
import os from pathlib import Path os.environ['PROJECT_BASE_DIR'] = str(Path(file).parent) project_path = os.getenv('PROJECT_BASE_DIR').split('scripts')[0] это хорошая помощь. .Спасибо