Если у меня есть папка с двумя скриптами Python: contants.py
и appl.py
(внутри папки что-то), и файлы
THEKONST = 5
и
from something.constants import THEKONST
print(THEKONST)
Что мне нужно сделать, чтобы я мог вызвать python something/appl.py
и не получить ошибку ModuleNotFoundError: No module named 'something'
Примечание. Я не могу изменять сценарии или то, как они вызывают другие.
Редактировать: Метод Тревора сработал ммм, забавно, тот же код, что и в прошлой ночной попытке, не работает с этим методом....поэтому я все стер и все переделал, но не на vscode, а с помощью Touch и Copy Paste, и теперь это работает.... и Я до сих пор не знаю почему... но, по крайней мере, теперь это работает (пишу это просто на заметку)
Или, если something/__init__.py
существует и ваш PYTHONPATH включает текущий рабочий каталог, вы можете использовать python -m something.appl
@КлаусД. В этом и есть загвоздка. Это код, написанный кем-то другим. Я не могу изменить код
Есть ли в корне файл setup.py
или аналогичный? Если это так, вам следует устанавливать приложение (в идеале в виртуальную среду или что-то подобное), а не пытаться запустить его непосредственно из дерева исходного кода. То есть python path/to/script.py
обычно является неправильным для вещей, которые являются компонентами более крупных приложений, а не для отдельных сценариев. Однако сейчас в вопросе действительно недостаточно информации, чтобы сказать, как автор развертываемого вами проекта намеревался его использовать.
Более того, что бы ни существовало setup.py
или его эквивалент, часто указывается «точка входа» для всего, что должно быть запущено из CLI, так что процесс установки сам создает исполняемую оболочку, которую вы можете вызвать из командной строки, не помещая python
в командную строку. совсем.
@CharlesDuffy, значит, единственный способ — изменить PYTHONPATH? Завтра попробую, спасибо! (здесь полночь, и я полусонный)
@KansaiRobot, "единственный путь"? Нет, конечно, это не единственный способ, но вы не предоставляете нам достаточно информации, чтобы знать, необходим ли он, поэтому указать его как необходимый шаг проще всего, если нет более подробной информации. Подход python -m something.appl
может работать вообще без каких-либо изменений PYTHONPATH - он определенно будет работать без изменений PYTHONPATH, если вы успешно установите более крупный проект в виртуальную среду, которая активна, когда вы пытаетесь запустить программу.
Похоже, вам нужно убедиться, что Python может найти модуль «что-то».
Сначала убедитесь, что структура папок правильна. Это должно выглядеть примерно так:
//path_to_your_folder
├── something
├── __init__.py
├── constants.py
├── appl.py
Убедитесь, что init.py присутствует в каталоге Something, чтобы сделать его пакетом Python.
Затем установите переменную среды PYTHONPATH. Это сообщает Python, где искать модули. В своем терминале перейдите в родительский каталог чего-либо и выполните следующее:
export PYTHONPATH=$PYTHONPATH:/path_to_your_folder
Замените «/path_to_your_folder» фактическим путем к каталогу, содержащему папку Something. Эта команда предназначена для Unix-подобных систем (Linux, macOS). Если вы используете Windows, используйте вместо этого команду «set»:
set PYTHONPATH=%PYTHONPATH%;C:\path_to_your_folder
Теперь запустите скрипт. У вас должна быть возможность запустить сценарий из любого места файловой системы, не обнаруживая ошибку ModuleNotFoundError.
python /path_to_your_folder/something/appl.py
Надеюсь это поможет.
после экспорта я получил PYTHONPATH как :/path_to_your_folder
с «:» в начале. Но это сработало! (что забавно, потому что вчера в полночь, в полусне, я думал, что это не так...) Спасибо!
Ставьте
something.
.