ModuleNotFoundError: нет модуля с именем 'mypackage' [duplicate]

Невозможность связывания с соответствующими библиотеками / объектными файлами или компиляция файлов реализации

Обычно каждая единица перевода генерирует объектный файл, содержащий определения символов, определенных в этой единицы перевода. Чтобы использовать эти символы, вам необходимо связать эти объектные файлы.

В разделе gcc вы должны указать все объектные файлы, которые должны быть связаны вместе в командной строке, или скомпилировать файлы реализации вместе.

g++ -o test objectFile1.o objectFile2.o -lLibraryName

Здесь libraryName - это просто имя библиотеки, без добавления к платформе. Так, например, в файлах библиотеки Linux обычно называют libfoo.so, но вы должны писать только -lfoo. В Windows этот же файл можно назвать foo.lib, но вы будете использовать тот же аргумент. Возможно, вам придется добавить каталог, в котором эти файлы можно найти, используя -L‹directory›. Обязательно не записывайте пробел после -l или -L.

Для XCode: добавьте пути поиска заголовка пользователя -> добавьте путь поиска библиотеки -> перетащите фактическую ссылку библиотеки в

В MSVS файлы, добавленные в проект, автоматически связывают их объектные файлы и генерируется файл lib (обычно используется). Чтобы использовать символы в отдельном проекте, вам нужно будет добавить файлы lib в параметры проекта. Это делается в разделе Linker свойств проекта в Input -> Additional Dependencies. (путь к файлу lib должен быть добавлен в Linker -> General -> Additional Library Directories). При использовании сторонней библиотеки, которая предоставляется с файлом lib, отказ в этом обычно приводит к ошибке.

Также может случиться так, что вы забудете добавить файл в компиляцию, и в этом случае объектный файл не будет сгенерирован. В gcc вы должны добавить файлы в командную строку. В MSVS добавление файла в проект заставит его скомпилировать его автоматически (хотя файлы могут, вручную, быть отдельно исключены из сборки).

В программировании Windows контрольный знак, который вы не связывали необходимая библиотека состоит в том, что имя неразрешенного символа начинается с __imp_. Посмотрите имя функции в документации, и она должна сказать, какую библиотеку вам нужно использовать. Например, MSDN помещает информацию в поле внизу каждой функции в разделе «Библиотека».

3
задан Martijn Pieters 17 November 2013 в 13:12
поделиться

2 ответа

Если вы выполняете app/server.py в качестве скрипта, родительский каталог app не добавляется к sys.path(). Вместо этого добавляется каталог app (не как пакет, а как путь поиска импорта).

У вас есть 3 варианта:

  1. Move server.py out пакета app (рядом с ним)
  2. Добавьте новый файл сценария рядом с app, который работает только:
    from app import server
    server.main()
    
  3. Добавьте родительский каталог от server.py до sys.path:
    import os.path
    import sys
    
    parent = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    sys.path.insert(0, parent)
    
    Этот последний вариант может вызвать больше проблем; теперь как пакет app, так и модули, содержащиеся в , пакет app находятся на sys.path. Вы можете импортировать как app.server, так и server, и Python увидит их как два отдельных модуля, каждый со своей собственной записью в sys.modules, с отдельными копиями своих глобал.
5
ответ дан Martijn Pieters 29 August 2018 в 00:47
поделиться

нужен __init__.py файл, будет рассматривать его как пакет

app | --server.py | --global_vars.py | --handlers

| - __init__.py ...

__init__.py может быть пустым

0
ответ дан fainle 29 August 2018 в 00:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: