У меня есть два пакета с именами pkg1 и pkg2. Пакет pkg1 является частью рабочего пространства с меткой abc в /home/csbales, а пакет pkg2 является частью рабочего пространства с меткой catkin_ws в /home/csbales. Чтобы обеспечить их и ROS, который они используют, я добавил следующие три строки в .bashrc:
source /opt/ros/melodic/setup.bash
source ~/catkin_ws/devel/setup.bash
source ~/abc/build/devel/setup.bash
Я запускаю Pycharm Community из свежего терминала, с pkg2 в качестве папки проекта (~/catkin_ws/src/pkg2). Я хочу запустить скрипт python, который импортирует из обоих пакетов, начиная примерно так:
#!/usr/bin/env python
import sys
# from os import sys, path
# sys.path.append(path.dirname(path.dirname(path.abspath(__file__))))
from pkg2 import Thing2
from pkg1 import Thing1
Когда я запускаю скрипт python, я получаю следующую ошибку:
ModuleNotFoundError: No module named 'pkg2'
Чтобы проверить, распознается ли, по крайней мере, pkg1, я меняю порядок строк pkg и получаю ту же ошибку, что и раньше. Затем я открываю новый терминал, прямо указываю источник pkg2 с
source ~/catkin_ws/devel/setup.bash
в терминале, а затем открываю Pycharm в том же терминале. Когда я запускаю тот же сценарий, я получаю следующую ошибку:
ModuleNotFoundError: No module named 'pkg1'
Я поменял строки импорта так, чтобы pkg1 шел после pkg2, и запустил его снова, но получил ошибку с pkg1. Импорт pkg2 теперь работает как надо, но pkg1 не работает, как раньше. Я пробовал менять строки в .bashrc, а затем открывать Pycharm, но пакет, который был выбран не последним, всегда вызывал ModuleNotFoundError, независимо от комбинации выбора источника через терминал или в .bashrc.
Я пробовал переделать каждое рабочее пространство. Я пробовал удалять и клонировать их снова. Ничего из этого не помогло. Я не могу объединить их. Чтобы проверить, я попробовал переместить строку с исходным кодом ROS в .bashrc и обнаружил, что ее размещение никак не влияет на описанное выше поведение. ROS работал независимо от этого. Я не знаю, куда двигаться дальше, и буду очень признателен за любой вклад.
Возможно, релевантная информация: