У меня два проекта. Во-первых, я могу импортировать свой модуль importme.py, например:
import importme
И теперь я могу без проблем использовать свою функцию hello () в модуле importme. Во втором я получаю:
ImportError: No module named 'importme'
Но я могу импортировать его через:
from . import importme
Почему я не могу импортировать модуль одинаково в обоих проектах? Стоит ли настраивать некоторые пути?
РЕДАКТИРОВАТЬ1:
Структура каталогов первого проекта:
testproject/
├── importme.py
└── start.py
Структура каталогов второго проекта:
spiders/
├── spider.py
├── download_page.py
├── importme.py
└── __init__.py
файл в этом.py пуст.
Я добавил структуру каталогов обоих проектов в разделе EDIT1.
Итак, как вы видите, второй проект - это пакет, поэтому вы должны импортировать его как этот from spiders import importme
. Я просто предполагаю, что этот не работает - это с __init__
и некоторые другие связанные вопросы SO здесь: stackoverflow.com/questions/10647729
Я импортирую его из того же каталога, что и основная программа. В start.py я импортирую importme.py. inspider.py Я импортирую importme.py. так в чем разница?
вопрос в том, как запустить эти скрипты?
Первый как python3 start.py
. Второй запускается как scrapy crawl <name of spider>
.
Мой любимый метод работы с PYTHONPATH
- установка пакета в режиме редактирования в виртуальной среде.
Создание виртуальной среды
# create
$ python -m venv ~/virtualevns/myenv
# then activate it
$ source ~/virtualenvs/myenv/bin/activate
# you can check whether it got activated
$ which python
home/user/virtualenvs/myenv/bin/python
Написание setup.py
для вашего проекта. Для этого обратитесь к официальному руководству по распространение пакетов.
Установка пакета в редактируемом формате.
Если вы устанавливаете пакет с флагом -e
, pip установит его в редактируемом формате, что означает, что все изменения, внесенные в код, будут присутствовать в пакете вашей среды:
$ cd mypkg
$ pip install -e .
Наконец, вам нужно настроить виртуальную среду для использования в любой среде IDE, которую вы используете в редакторе.
Это отличный рабочий процесс, потому что он чистый и надежный - вы используете именно то, что вы использовали бы в среде производства / готового пакета.
Я использую venv, но проблема в том, что в первом примере я могу импортировать модуль, а во втором - нет. Итак, мой вопрос: почему, в чем разница и как ее решить.
Пожалуйста, добавьте обзор структуры каталогов. И, наверное, да, есть что-то вроде
PYTHONPATH
.