2016-03-24 12 views
1
Aşağıdaki dosyaları var

: Artık"import pkg.module" öğesinin pkg/__ init.py__ cinsinden eşdeğeri "import module" değeri 2,7 iken, 3.5 değil mi?

pkg/__init_.py 
pkg/module.py 

, pkg/__init__.py yılında, nasıl module aktarırım?

o mi

import pkg.module 

veya

import module 

?

Doğru mu, Python 2.7'de her iki yöntem işe yararken, Python 3.x ilkini gerektirir mi?

+0

Bu ithalat module' 'dır. Neden en azından python3'te mutlak diretrik hiyerarşik yola ihtiyacın olduğunu anlamıyorum. Bu kesinlikle gerekli değildir –

+0

@h_e_u_r_e_k_a It 'import module' değil. Python 3'te çalışmıyor! Python 2'de belirsiz olabilir, bu yüzden artık Python 3'te bu mümkün değil. Standart kütüphanede modül denilen bir modülü veya herhangi bir başka ithalat yolunu düşünün. 'İthalat modülü' ne anlama geliyor? – BlackJack

+0

@BlackJack: Yani bu benim varsayımımın "doğru" olduğu anlamına geliyor? Kısa bir cevaba koyabilir misin? (Ben de yapabilirim.) – Michael

cevap

2

Varsayımlarınız temel olarak doğrudur. Modül arama yolunda (sys.path) gerçekten almak istediğiniz numaradan önce module adlı bir modül varsa, ikinci yöntem Python 2.7'de çalışmayabilir. Bu yüzden Python 3, ithalatı daha güvenli ve daha öngörülebilir hale getirmek için mutlak ithalata geçti.

Python 2.7 aktarımını, modülün üst tarafındaki Python 3 ile from __future__ import absolute_import arasında çalışmak üzere değiştirmek mümkündür.

Python iki sürümü de paketler içinde açık bir göreli ithalat izin:

from . import module