2015-03-16 9 views
5

var:imp.load_source .py daha başka bir dosya, ama bir .py da bu kurulum var bu dizinin

Dosya: a.ext1

a.ext1 bir yükleyen a.py. bir sebepten ötürü, ama bir motor olarak a.ext1 dosyasını yüklemem gerekiyor.

Py3'te düzgün çalışıyor olabilirim, ancak py2'de çalışamıyorum.

İşte benim python2 girişimi: ** Bu ana akış, tabii ki etrafında daha fazla kod var.

file = os.path.abspath(os.path.expanduser('a.ext1') 
directory = os.path.dirname(file) 
sys.path.append(directory) 
fullname = 'my.name.space.a' 
sys.modules['my.name.space'] = imp.new_module('my.name.space') 
x = imp.load_source(fullname,file) 

Şimdi, eğer yaparsam;

module 'my.name.space' from '<path>/a.ext1' 

ama dir (x) yaparsanız, bu a.py. dan bana bazı bilgiler verir: x, beni söyleyecektir Bana bir .ext1 dosyasından gelenleri vermesini istiyorum.

Bu çalışma py2'de nasıl çalışır?

file = os.path.abspath(os.path.expanduser('a.ext1')) 
directory = os.path.dirname(file) 
sys.path.append(directory) 
fullname = 'my.name.space.a' 
loader = importlib.machinery.SourceFileLoader(fullname = fullname, 
               path = file) 
x = loader.load_module() 

Şimdi istediğim edilir x tam olarak ne, a.ext1 dosyası değil .py

herhangi bir fikir bu çalışma nasıl alabilirim: Bu PY3 nasıl çalıştığını İşte

olduğunu Py2 için?

(Btw ı ı yığın taşması, bu konuda bulabildiğim tüm okudum, ama bir .py da var durum değildi) yolları boş modül oluşturma ve ekleme ile mırıldanmak jumbo hakkında

cevap

0

Dunno ama aynı işler 2.7 için benim için tamam. Kesinlikle tek başına basit bir örnekle bir problem olmamalı.

söyleyebilirim senin a.py başka yerlerde içindekilerin aynı modül adı altında yüklemek başka ne ile çatışmasıvar ki bu durumda programında, hem de my.name.space.a içine yükleniyor. Sadece bir seferde verilen bir isim tek bir küresel modül örneği olabilir mesela:

a.py:

py_stuff = 1 

a.ext1

ext1_stuff = 1 

test-ok.py:

import imp 

x = imp.load_source('a', 'a.ext1') 

print(x) # <module 'a' from 'a.ext1'> 
print(dir(x)) # ['__builtins__', ..., 'ext1_stuff'] 

test-not-ok.py:

import imp 

import a 

x = imp.load_source('a', 'a.ext1') 

print(x) # <module 'a' from 'a.ext1'> 
print(dir(x)) # ['__builtins__', ..., 'ext1_stuff', 'py_stuff'] 
İlgili konular