У меня есть проект Python, и я хочу написать средство запуска командной строки. Мой проект отлично работает, когда я запускаю тесты или запускаю из своей IDE (pycharm). Однако, когда я пытаюсь запустить через командную строку, я получаю ошибку ModuleNotFoundError: No module named 'python'
.
Вот моя структура каталогов:
.
├── Makefile
├── Pipfile
├── Pipfile.lock
├── README.md
├── create_jenkins_jobs.sh
└── python
├── __init__.py
├── create_credentials.py
├── create_jenkins_jobs_cli.py
├── credential_builder.py
├── jenkins_multibranch_job_builder.py
├── templates
│ ├── job.xml
│ ├── multibranch_job_template.xml
│ ├── ssh_cred_template.xml
│ └── user_pw_cred_template.xml
└── tests
├── __init__.py
├── integration
│ ├── __init__.py
│ ├── build_credential_test.py
│ ├── build_job_test.py
│ ├── conftest.py
│ ├── test_id_rsa
│ └── test_id_rsa.pub
└── unit
Сценарий оболочки create_jenkins_jobs.sh
содержит:
#!/bin/bash
python3 python/create_jenkins_jobs_cli.py "${@}"
файл create_jenkins_jobs_cli.py
содержит следующий код:
from typing import Set
from shared.common import preflight_env_check
from python.jenkins_multibranch_job_builder import JenkinsMultibranchJobBuilder
def configure_jenkins_jobs(git_repos: Set[str]):
jenkins_job_builder = JenkinsMultibranchJobBuilder(jenkins_server_url=JENKINS_BASE_SERVER_URL,
jenkins_folder=JENKINS_ROOT_JOB_FOLDER,
user=JENKINS_USER, token=JENKINS_TOKEN,
git_cred_id=GIT_SSH_CRED_ID,
git_repos=git_repos)
jenkins_job_builder.configure_jobs()
configure_jenkins_jobs(GIT_REPOS)
Когда я запускаю create_jenkins_jobs.sh
или create_jenkins_jobs_cli.py
, я всегда получаю
ModuleNotFoundError: No module named 'python'
$>./create_jenkins_jobs.sh
/Users/pswenson/dev/cc-cicd-automation/.venv/bin/python3: Error while finding module specification for 'python/create_jenkins_jobs_cli.py' (ModuleNotFoundError: No module named 'python/create_jenkins_jobs_cli')
Я пробовал всевозможные методы, чтобы заставить это работать с PYTHONPATH, рабочими каталогами и т. д.
Кажется, есть что-то основное в том, как работают модули Python, чего я не понимаю.
Изменяется ли строка:
from python.jenkins_multibranch_job_builder import JenkinsMultibranchJobBuilder
к
from jenkins_multibranch_job_builder import JenkinsMultibranchJobBuilder
Сортировать вас?
Я знал, что это какая-то глупость, спасибо. оказалось, что pycharm был настроен таким образом, что ^^^ не работал, если я не ссылался на python как на модуль.... поэтому, когда я сделал ^^^, pycharm сломался, но его было легко исправить.
Это каталог, в котором находится основной скрипт, а не текущий рабочий каталог, который автоматически добавляется к пути Python. В каталоге
python
нет пакета с именем./python
.