Adında tire veya tire (-) bulunan Python Modülü


94

Adında tire bulunan mevcut bir python modülüm var, foo-bar.py

Modül adını değiştirmek, modül paylaşılırken kaçınmayı tercih ettiğim bir şeydir ve özel durumumun çalışması için kullanıldığı tüm yerleri takip etmem gerekir.

Adında tipik olarak yasak olan '-' içeren bir modülü yüklemenin bir yolu var mı?

(Bunun en iyi uygulama olmadığını anlıyorum. Ancak bu durum için çok daha büyük bir uygulama setini yeniden tasarlamamayı ve test etmemeyi tercih ederim. Ayrıca kurumsal ustalarımın uygulama için zaman ayırmamı onaylayacağını sanmıyorum. böyle bir değişiklik.)


5
IDE'nizde dosyaları bulup tüm e'leri ya da her neyse foo-barile değiştiremezsiniz foobar? Bu ne kadar zor?
agf



1
agf Kısa cevap: hepsi benim kodum değil.
Huffman'ı atla

S.Lott diğer kullanıcılar ticari uygulamalardır. Bunun mümkün olduğunu nasıl anladım.
Huffman

Yanıtlar:


101

Bunu kullanarak yapabilirsiniz __import__(). Örneğin:

foobar = __import__("foo-bar")

Ancak bunun yerine modülü gerçekten yeniden adlandırmalısınız. Bu şekilde, modülün dosya adının programda kullanılan tanımlayıcıdan farklı olduğu durumlarda kafa karışıklığını önleyebilirsiniz.


4
Teşekkürler. Pratik olan her yerde kurallara uyulması gerektiğini anlıyorum. Bu özel konuyu bir departman kod incelemesi sırasında gündeme getireceğim.
Huffman

58

Bu sorunun soruyu soran kişiyi tatmin edecek şekilde yanıtlandığını biliyorum, ancak burada kullanmaktan daha fazla haklı olduğuna inandığım başka bir yanıt var __import__().

import importlib
mod = importlib.import_module("path.to.my-module")
# mod.yourmethod()

Dokümanlara göre:

"This provides an implementation of import which is portable to any 
Python interpreter. This also provides an implementation which is 
easier to comprehend than one implemented in a programming language 
other than Python."

Python 2.7 + sadece


5
Bunu nasıl yapacağımı arıyordum ve cevabınız benim durumum için eski cevaptan daha iyi. Benim gibi bir konumdaki insanların tüm ilgili bilgileri tek bir yerde bulabilmeleri için, zaten mevcut olana yeni bir cevap olarak eklemek için farklı bir cevap görmeniz her zaman iyidir.
Davy M

0

Kısa çizgi yerine alt çizgi kullanmayı deneyin.

pymysql_utils'i içe aktar

pip tarafından kullanılan modülün adı import pymysql-utils olsa da benim için çalıştı

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.