Поэзия: противоречивый импорт

#python #python-import #python-poetry

Вопрос:

Структура моего проекта:

 .
├── pyproject.toml
├── src
│   ├── damastes
│   │   ├── __init__.py
│   │   ├── main.py
│   ├── __init__.py
 

pyproject.toml :

 ...
[tool.poetry.scripts]
damastes = "damastes.main:main"
...
 

~/.local/bin/damastes :

 #!/usr/bin/python
# -*- coding: utf-8 -*-
import re
import sys
from damastes.main import main
if __name__ == '__main__':
    sys.argv[0] = re.sub(r'(-script.pyw|.exe)?

С этой конфигурацией,

 $ damastes
 

работает успешно, но

 $ poetry run damastes
 

результаты в

 ModuleNotFoundError: No module named 'damastes'
 

С измененными pyproject.toml :

 ...
[tool.poetry.scripts]
damastes = "src.damastes.main:main"
...
 

и ~/.local/bin/damastes , построенный и установленный соответственно:

 #!/usr/bin/python
# -*- coding: utf-8 -*-
import re
import sys
from src.damastes.main import main
if __name__ == '__main__':
    sys.argv[0] = re.sub(r'(-script.pyw|.exe)?

Все наоборот:

 $ poetry run damastes
 

это успех;

 $ damastes
 

результаты в

 ModuleNotFoundError: No module named 'src'
 

Что я упускаю?

UPD:

С pyproject.toml :

 ...
[tool.poetry.scripts]
damastes = "damastes.main:main"
...
 

бежать

 $ poetry install
 

снова.


Комментарии:

1. перейдите ~/.local/bin/damastes и посмотрите, как структурирован проект , и из интерпретатора python попробуйте загрузить main , как только вы узнаете способ импорта в оболочке python, обновите его в .toml файле

2. Не могли бы вы быть более конкретными? От ~/.local/bin : >>> import damastes и >>> import damastes.main является успехом; >>> import src приводит к ModuleNotFoundError: No module named 'src' . Здесь нет ничего нового.

3. откройте пакет damates в проводнике файлов, вы увидите там много файлов, которые, вероятно, main были бы записаны __init__.py . попробуйте найти src там. и, основываясь на структуре каталогов/пакетов, попытайтесь получить доступ к модулю/функции, как только вы сможете получить доступ src , ваша работа будет выполнена

4. Проект не был создан с текущим именем и структурой. Нужно поддерживать синхронизацию среды.

5. у тебя есть решение? вы можете опубликовать его в качестве ответа

Ответ №1:

Похоже, что после любого изменения в структуре проекта нужно запустить

 $ poetry install
 

снова.

, '', sys.argv[0])
sys.exit(main())
С этой конфигурацией,


работает успешно, но


результаты в


С измененными pyproject.toml :


и ~/.local/bin/damastes , построенный и установленный соответственно:


Все наоборот:


это успех;


результаты в


Что я упускаю?

UPD:

С pyproject.toml :


бежать


снова.

Комментарии:

1. перейдите ~/.local/bin/damastes и посмотрите, как структурирован проект , и из интерпретатора python попробуйте загрузить main , как только вы узнаете способ импорта в оболочке python, обновите его в .toml файле

2. Не могли бы вы быть более конкретными? От ~/.local/bin : >>> import damastes и >>> import damastes.main является успехом; >>> import src приводит к ModuleNotFoundError: No module named 'src' . Здесь нет ничего нового.

3. откройте пакет damates в проводнике файлов, вы увидите там много файлов, которые, вероятно, main были бы записаны __init__.py . попробуйте найти src там. и, основываясь на структуре каталогов/пакетов, попытайтесь получить доступ к модулю/функции, как только вы сможете получить доступ src , ваша работа будет выполнена

4. Проект не был создан с текущим именем и структурой. Нужно поддерживать синхронизацию среды.

5. у тебя есть решение? вы можете опубликовать его в качестве ответа

Ответ №1:

Похоже, что после любого изменения в структуре проекта нужно запустить


снова.

, '', sys.argv[0])
sys.exit(main())

Все наоборот:


это успех;


результаты в


Что я упускаю?

UPD:

С pyproject.toml :


бежать


снова.

Комментарии:

1. перейдите ~/.local/bin/damastes и посмотрите, как структурирован проект , и из интерпретатора python попробуйте загрузить main , как только вы узнаете способ импорта в оболочке python, обновите его в .toml файле

2. Не могли бы вы быть более конкретными? От ~/.local/bin : >>> import damastes и >>> import damastes.main является успехом; >>> import src приводит к ModuleNotFoundError: No module named 'src' . Здесь нет ничего нового.

3. откройте пакет damates в проводнике файлов, вы увидите там много файлов, которые, вероятно, main были бы записаны __init__.py . попробуйте найти src там. и, основываясь на структуре каталогов/пакетов, попытайтесь получить доступ к модулю/функции, как только вы сможете получить доступ src , ваша работа будет выполнена

4. Проект не был создан с текущим именем и структурой. Нужно поддерживать синхронизацию среды.

5. у тебя есть решение? вы можете опубликовать его в качестве ответа

Ответ №1:

Похоже, что после любого изменения в структуре проекта нужно запустить


снова.

, », sys.argv[0])
sys.exit(main())

С этой конфигурацией,


работает успешно, но


результаты в


С измененными pyproject.toml :


и ~/.local/bin/damastes , построенный и установленный соответственно:


Все наоборот:


это успех;


результаты в


Что я упускаю?

UPD:

С pyproject.toml :


бежать


снова.

Комментарии:

1. перейдите ~/.local/bin/damastes и посмотрите, как структурирован проект , и из интерпретатора python попробуйте загрузить main , как только вы узнаете способ импорта в оболочке python, обновите его в .toml файле

2. Не могли бы вы быть более конкретными? От ~/.local/bin : >>> import damastes и >>> import damastes.main является успехом; >>> import src приводит к ModuleNotFoundError: No module named 'src' . Здесь нет ничего нового.

3. откройте пакет damates в проводнике файлов, вы увидите там много файлов, которые, вероятно, main были бы записаны __init__.py . попробуйте найти src там. и, основываясь на структуре каталогов/пакетов, попытайтесь получить доступ к модулю/функции, как только вы сможете получить доступ src , ваша работа будет выполнена

4. Проект не был создан с текущим именем и структурой. Нужно поддерживать синхронизацию среды.

5. у тебя есть решение? вы можете опубликовать его в качестве ответа

Ответ №1:

Похоже, что после любого изменения в структуре проекта нужно запустить


снова.