Мой питон почему-то не может найти никаких модулей в том же каталоге. Что я делаю не так? (python2.7)
Итак, у меня есть один каталог 2014_07_13_test с двумя файлами в нем:
- test.py
- hello.py
где hello.py:
# !/usr/local/bin/python
# -*- coding: utf-8 -*-
def hello1():
print 'HelloWorld!'
и test.py:
# !/usr/local/bin/python
# -*- coding: utf-8 -*-
from hello import hello1
hello1()
Тем не менее питон дает мне
>>> Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 4, in <module>
ImportError: No module named hello
Что не так?
import sys; sys.path
>>> import test
Ответы:
Ваш код в порядке, я подозреваю, что ваша проблема в том, как вы его запускаете.
Вам нужно запустить python из каталога 2014_07_13_test.
Откройте командную строку и нажмите cd в каталог 2014_07_13_test.
Например:
$ cd /path/to/2014_07_13_test $ python test.py
Если вы не можете 'cd' в такой каталог, вы можете добавить его в sys.path
В test.py:
import sys, os sys.path.append('/path/to/2014_07_13_test')
Или установите / отредактируйте PYTHONPATH
И все должно быть хорошо ...
... ну, есть небольшая ошибка с вашими строками 'shebang' (первая строка в обоих ваших файлах), не должно быть пробелов между '#' и '!'
Существует лучше притон вы должны использовать.
Также вам не нужна строка shebang для каждого файла ... только те, которые вы собираетесь запускать из своей оболочки как исполняемые файлы.
источник
Измените свой импорт в test.py на:
from .hello import hello1
источник
from . import hello
from . import local_module
У меня была аналогичная проблема, я решил ее, явно добавив каталог файла в список путей:
import os import sys file_dir = os.path.dirname(__file__) sys.path.append(file_dir)
После этого у меня не было проблем с импортом из того же каталога.
источник
Вот общее решение, которое я использую. Решает проблему импорта из модулей в той же папке:
import os.path import sys sys.path.append(os.path.join(os.path.dirname(__file__), '..'))
Поместите это вверху модуля, который выдает ошибку «Нет модуля с именем xxxx».
источник
В моем случае Python не смог его найти, потому что я поместил код внутри модуля с дефисами, например
my-module
. Когда я поменял наmy_module
это работало.источник
Я столкнулся с этой проблемой. У меня было три папки в одном каталоге, поэтому мне пришлось указать, в какой папке. Пример: из скрипта импорта папки
источник
Следующее не решает проблему OP, но заголовок и ошибка - это именно то, с чем я столкнулся.
Если в вашем проекте есть
setup.py
сценарий, вы можете установить этот пакет, в котором вы находитесь, с помощьюpython3 -m pip install -e .
илиpython3 setup.py install
илиpython3 setup.py develop
, и этот пакет будет установлен, но по-прежнему доступен для редактирования (поэтому изменения в коде будут видны при импорте пакета). Если у него нетsetup.py
, разберитесь в этом .В любом случае, проблема, с которой сталкивается OP, похоже, больше не существует?
файл
one.py
:def function(): print("output")
файл
two.py
:#!/usr/bin/env python3 import one one.function()
chmod +x two.py # To allow execution of the python file ./two.py # Only works if you have a python shebang Command line output: output
Другие решения кажутся «грязными»
В случае OP с 2 тестовыми файлами их изменение для работы, вероятно, нормально. Однако в других реальных сценариях методы, перечисленные в других ответах, вероятно, не рекомендуются. Они требуют, чтобы вы изменили код python или ограничили вашу гибкость (запуск файла python из определенного каталога) и, как правило, вызывают раздражение. Что делать, если вы только что клонировали проект, и это произойдет? Вероятно, это уже работает для других, и вносить изменения в код не нужно. Выбранный ответ также требует, чтобы люди запускали сценарий из определенной папки, чтобы он заработал. Это может стать источником длительного раздражения, а это никогда не бывает хорошо. Он также предлагает добавить вашу конкретную папку python в PATH (можно сделать через python или командную строку). Опять же, что произойдет, если вы переименуете или переместите папку через несколько месяцев? Вы должны снова выследить эту страницу, и в конце концов обнаружите, что вам нужно установить путь (и что вы сделали именно это несколько месяцев назад), и что вам просто нужно обновить путь (конечно, вы можете использовать sys.path и программно установить его, но это все еще может быть нестабильным ). Множество источников сильного раздражения.
источник
Если вы уверены, что все модули и файлы, которые вы пытаетесь импортировать, находятся в одной папке, и их следует выбирать напрямую, просто указав имя, а не путь ссылки, тогда ваш редактор или терминал должен открыть основную папку, в которой все файлы / модули присутствуют.
Либо попробуйте запустить из Терминала, сначала убедитесь, что вы перешли в правильный каталог.
CD
path to the root folder where all the modules are
питон
script.py
Или, если вы запускаете [F5] из редактора, то есть VsCode, откройте там всю папку, а не отдельные файлы.
источник