Temelde gibi bir python dosyası olduğunda:
python-code.py
ve kullan:
import (python-code)
yorumlayıcı bana sözdizimi hatası veriyor.
Nasıl düzelteceğimize dair bir fikri olan? Python dosya adlarında tire işaretleri yasadışı mı?
Temelde gibi bir python dosyası olduğunda:
python-code.py
ve kullan:
import (python-code)
yorumlayıcı bana sözdizimi hatası veriyor.
Nasıl düzelteceğimize dair bir fikri olan? Python dosya adlarında tire işaretleri yasadışı mı?
Yanıtlar:
Python Kodu için Stil Kılavuzu PEP 8'e göz atmalısınız :
Paket ve Modül Adları Modüllerin kısa, tamamen küçük harfli adları olmalıdır. Okunabilirliği geliştirirse, modül adında alt çizgiler kullanılabilir. Alt çizgi kullanımı önerilmez, ancak Python paketlerinin de kısa, tümü küçük harfli adları olmalıdır.
Modül adları dosya adlarına eşlendiğinden ve bazı dosya sistemleri büyük / küçük harf duyarsız ve kısaltılmış uzun adlar olduğundan, modül adlarının oldukça kısa olarak seçilmesi önemlidir - bu Unix'te sorun olmayacaktır, ancak eski Mac veya Windows sürümlerine veya DOS'a aktarıldığında sorun.
Başka bir deyişle: dosyanızı yeniden adlandırın :)
ops-scripts
ve normal bir paket ad alanı yaklaşımı kullanılarak içe aktarılamayacağını bilirsiniz. Veya stop-website.py
benzer bir efekt için tek bir komut dosyası adlandırılabilir . Bunlardan herhangi biri hala runpy
ve diğer bazı yöntemlerle içe aktarılabilir , ancak bu bazı yaygın hataların önlenmesine yardımcı olur.
cgi-bin
oldukça standart afaik olan klasörde (onlara unitttests yapıyor) python cgi dosyaları kullanıyorum . Böyle nadir bir durum yoksa, üzerinde kontrolünüz varsa modülünüzü kesinlikle yeniden adlandırın.
Kodunuzda dikkat etmeniz gereken bir diğer şey de içe aktarmanın bir işlev olmamasıdır. Yani import(python-code)
olmalıdır import python-code
bazıları zaten söylediğim gibi "ithal piton eksi kod" olarak yorumlanır hangi, amaçladığınız gibi değil. Gerçekten adında tire bulunan bir dosyayı içe aktarmanız gerekiyorsa aşağıdakileri yapabilirsiniz ::
python_code = __import__('python-code')
Ancak, yukarıda da belirtildiği gibi, bu gerçekten tavsiye edilmez. Kontrol ettiğiniz bir şeyse dosya adını değiştirmeniz gerekir.
TLDR
Kısa çizgiler yasadışı değildir, ancak bunları 3 nedenden dolayı kullanmamalısınız:
Kesinlikle tire ile bir dosya adı almanız gerekiyorsa, özel sözdizimi şudur:
module_name = __import__('module-name')
Neden özel sözdizimine ihtiyacımız olduğunu merak ediyor musunuz?
Özel sözdiziminin nedeni, yazarken import somename
tanımlayıcıya sahip bir modül nesnesi oluşturmanızdır somename
(böylece daha sonra örneğin ile kullanabilirsiniz somename.funcname
). Tabii ki module-name
geçerli bir tanımlayıcı değildir ve dolayısıyla geçerli bir tanımlayıcı veren özel sözdizimi değildir.
Modül adının neden geçerli tanımlayıcı olmadığını anlamıyorsunuz?
Endişelenme - Ben de yapmadım. İşte size yardımcı olacak bir ipucu: Bu piton hattında Görünüş: x=var1-var2
. Ödevin sağ tarafında bir çıkarma veya kısa çizgi içeren bir değişken adı görüyor musunuz?
PS
Tek bir yerde diğer tüm cevaplardan en alakalı bilgi parçaları olarak kabul ettiğim şey hariç, cevabımda hiçbir şey orijinal değil
psycopg2_binary = import_module('psycopg2-binary')
. Hata => ModuleNotFoundError: No module named 'psycopg2-binary'
. Ama psycopg2-binary
yüklü. Nasıl ekleyeceğimi bilmiyorum.
Sorun şu ki python-code
bir tanımlayıcı değil. Ayrıştırıcı bunu python
eksi olarak görür code
. Tabii ki bu istediğini yapmaz. Aynı zamanda geçerli bir python tanımlayıcısı olan bir dosya adı kullanmanız gerekecektir. -
Simgesini alt çizgi ile değiştirmeyi deneyin .
Muhtemelen bunu bir __import__
hack yoluyla içe aktarabilirsiniz , ancak nasıl olduğunu bilmiyorsanız yapmamalısınız. Python modül adları geçerli değişken adları ("tanımlayıcılar") olmalıdır - yani bir modülünüz foo_bar
varsa, bunu Python ( print foo_bar
) içinden kullanabilirsiniz . Tuhaf bir adla ( print foo-bar
-> sözdizimi hatası) bunu yapamazsınız .
Python 3'te import_module kullanın :
from importlib import import_module
python_code = import_module('python-code')
Daha genel olarak,
import_module('package.subpackage.module')
Doğru dosya adlandırma en iyi yol olmasına rağmen, python-code
kontrolümüz altında değilse, bir kesmek kesmek __import__
, kopyalamak, yeniden adlandırmak veya diğer yazarların kodlarıyla uğraşmaktan daha iyidir. Ancak, denedim ve .py
uzantı ekleyerek dosyayı yeniden adlandırmadıkça işe yaramadı . Nasıl bir açıklama almak için doktora baktıktan sonra .py
, ben bununla sona erdi:
import imp
try:
python_code_file = open("python-code")
python_code = imp.load_module('python_code', python_code_file, './python-code', ('.py', 'U', 1))
finally:
python_code_file.close()
python-codec
İlk çalıştırmada yeni bir dosya oluşturdu .