2014-07-13 24 views
25

Benim python'um bir şekilde aynı dizinde hiçbir modül bulamıyor. Neyi yanlış yapıyorum? (Python2.7)Python, aynı klasörde modülü bulamıyor

Böylece bunun iki dosyalarla bir dizin '2014_07_13_test' vardır:

  1. test.py
  2. hello.py

nerede hello.py:

# !/usr/local/bin/python 
# -*- coding: utf-8 -*- 

def hello1(): 
    print 'HelloWorld!' 

ve test.py:

# !/usr/local/bin/python 
# -*- coding: utf-8 -*- 

from hello import hello1 

hello1() 

Yine piton

>>> Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "<string>", line 4, in <module> 
ImportError: No module named hello 

nesi var bana veriyor?

+0

nasıl komut yürütme verir modülün üstündeki bu koyun: Aynı klasördeki modüllerden ithalatı için sorunu çözer? Ayrıca ithalat sys çıktı nedir? sys.path' – Salem

+1

Deneyi deneyin >>> import test' – martineau

+0

@Casy_fill Programınızı dizinden nereden çalıyorsunuz, dosyalar nerede? İçe aktarma için, içe aktarılan ve içe aktarılan dosyaların bir dizini paylaşması önemli değildir. Önemli olan, Python yorumlayıcınızın geçerli dizinin doğru şekilde ayarlanmış olmasıdır. –

cevap

25

Sizin kodunuz gayet iyi, sorununuzu nasıl başlattığınızdan şüpheleniyorum.

'2014_07_13_test' dizininden python'u başlatmanız gerekiyor.

'2014_07_13_test' dizininize bir komut istemi ve 'cd' açın. Örneğin

:

$ cd /path/to/2014_07_13_test 
$ python test.py 

böyle dizine 'cd' sen test.py olarak sys.path

ekleyebilirsiniz yapamıyorsanız:

import sys, os 
sys.path.append('/path/to/2014_07_13_test') 

Veya set/PYTHONPATH

ve her şey iyi olmalıdır ...

... 'shebang' hatlarınızla (dosyalarınızdaki ilk satır) ufak bir hata var, '#' ile '!' Arasında boşluk olmamalı

Kullanmanız gereken bir better shebang var.

Ayrıca, her dosyada shebang satırına ihtiyacınız yok ... sadece kabuktan çalıştırılabilir dosyalar olarak çalıştırmayı düşündüğünüz olanlar. Açıkça yolu listesine dosyanın dizin ekleyerek bunu çözmüş,

from .hello import hello1 
+0

çok teşekkürler, bu konu! Ne yazık ki, SublimeRepl (kullandığım) şu anda klasörden python'u desteklemiyor, bu yüzden PATH'ı şimdi –

19
için test.py içinde ithalat değiştirin

Bundan sonra

import os 
import sys 

file_dir = os.path.dirname(__file__) 
sys.path.append(file_dir) 

, Aynı dizinden içe aktarmada sorun yaşamadım.

+6

'a dışa aktarmam gerekiyor gibi görünüyorsa Bunu daha sonra bulursa, buna nispi ithalat denir ve python 2.5'e eklenir: https : //docs.python.org/2.5/whatsnew/pep-328.html – sgfit

3

Ben benzer bir sorun vardı:

0

Kullandığım genel çözüm.

import os.path 
import sys 
sys.path.append(os.path.join(os.path.dirname(__file__), '..')) 

hatası "Hiçbir modül adlı xxxx"