Python modülünden paylaşılan bir nesne oluşturmak için Cython kullanıyorum. Derleme çıktısı build/lib.linux-x86_64-3.5/<Package>/<module>.cpython-35m-x86_64-linux-gnu.so
'a yazılmıştır. Adlandırma kuralını değiştirmek için herhangi bir seçenek var mı? Dosyayı, yorumlayıcı sürümü veya ark eki olmadan <module>.so
olarak adlandırılmasını istiyorum.Cython'un .so dosyaları için adlandırma kurallarını değiştir
cevap
setuptools
, son ekini tamamen değiştirmek veya kaldırmak için seçenek sunmuyor gibi görünüyor. Sihirli distutils/command/build_ext.py
olur: Ben bir post-build yeniden adlandırma eylemi eklemeniz gerekecektir gibi
def get_ext_filename(self, ext_name):
from distutils.sysconfig import get_config_var
ext_path = ext_name.split('.')
ext_suffix = get_config_var('EXT_SUFFIX')
return os.path.join(*ext_path) + ext_suffix
görünüyor. 08/12/2016 den
Güncelleme:
Tamam, ben aslında çözüm göndermek için unuttum. Aslında, yerleşik install_lib
komutunu aşırı yükleyerek yeniden adlandırma eylemi gerçekleştirdim. setup
işlevinde komutu aşırı Şimdi yapmanız gereken tek şey
from distutils.command.install_lib import install_lib as _install_lib
def batch_rename(src, dst, src_dir_fd=None, dst_dir_fd=None):
'''Same as os.rename, but returns the renaming result.'''
os.rename(src, dst,
src_dir_fd=src_dir_fd,
dst_dir_fd=dst_dir_fd)
return dst
class _CommandInstallCythonized(_install_lib):
def __init__(self, *args, **kwargs):
_install_lib.__init__(self, *args, **kwargs)
def install(self):
# let the distutils' install_lib do the hard work
outfiles = _install_lib.install(self)
# batch rename the outfiles:
# for each file, match string between
# second last and last dot and trim it
matcher = re.compile('\.([^.]+)\.so$')
return [batch_rename(file, re.sub(matcher, '.so', file))
for file in outfiles]
edilir: Burada mantık var Hala
setup(
...
cmdclass={
'install_lib': _CommandInstallCythonized,
},
...
)
, ben standart komutları aşırı memnun değilim; Daha iyi bir çözüm bulursanız, gönderin ve cevabınızı kabul edeceğim.
Bu davranış dağıtım paketinde tanımlanmıştır. "EXT_SUFFIX" değişken örneğin," .cp35-win_amd64" platformu bilgileri içerir
# Lib\distutils\command\build_ext.py
def get_ext_filename(self, ext_name):
r"""Convert the name of an extension (eg. "foo.bar") into the name
of the file from which it will be loaded (eg. "foo/bar.so", or
"foo\bar.pyd").
"""
from distutils.sysconfig import get_config_var
ext_path = ext_name.split('.')
ext_suffix = get_config_var('EXT_SUFFIX')
return os.path.join(*ext_path) + ext_suffix
Python 3.5 ile başlayan: distutils sysconfig ve "EXT_SUFFIX" yapılandırma değişkeni kullanır. komuta build_ext
def get_ext_filename_without_platform_suffix(filename):
name, ext = os.path.splitext(filename)
ext_suffix = sysconfig.get_config_var('EXT_SUFFIX')
if ext_suffix == ext:
return filename
ext_suffix = ext_suffix.replace(ext, '')
idx = name.find(ext_suffix)
if idx == -1:
return filename
else:
return name[:idx] + ext
Ve özel :
Aşağıdaki fonksiyonu yazdım
from Cython.Distutils import build_ext
class BuildExtWithoutPlatformSuffix(build_ext):
def get_ext_filename(self, ext_name):
filename = super().get_ext_filename(ext_name)
return get_ext_filename_without_platform_suffix(filename)
Kullanımı: Setuptools seçenekleri oluşturdukça
setup(
...
cmdclass={'build_ext': BuildExtWithoutPlatformSuffix},
...
)
Kodunuz bana yardımcı oldu. Teşekkür ederim! – q0987
- 1. varlıklarını, dosya yapısını ve adlandırma kurallarını doğrulamak
- 2. Rayları adlandırma kurallarını nasıl geçersiz kılarım?
- 3. .so ve .a dosyaları arasındaki fark nedir?
- 4. DTO'lar için ReSharper adlandırma kurallarını göz ardı et
- 5. Dosyaları yeniden adlandırma Powershell
- 6. Django S3Direct dosyaları yeniden adlandırma
- 7. SO
- 8. Matematik işlemlerini kullanarak dosyaları yeniden adlandırma
- 9. ANT kopyalama sırasında dosyaları yeniden adlandırma
- 10. Nasıl Formidable tarafından ayrıştırılmış dosyaları yeniden adlandırma?
- 11. Bir SDK (tek jar dosyası) ile "so" dosyaları oluşturun
- 12. .o .a ve .so dosyaları arasındaki fark nedir?
- 13. Veritabanındaki validasyon kurallarını kaydet
- 14. Uzantı yöntemi ad alanları ve sponsor sınıfları için adlandırma kuralları
- 15. .so arama yolları
- 16. Bir UNIX dizinindeki dosyaları yeniden adlandırma - kabuk betikleme
- 17. Dosyaları joker karakterlerini kullanarak cmd olarak yeniden adlandırma
- 18. global Javascript dosyaları ve adlandırma kuralları (göze batmayan javascript)?
- 19. TFS Dosyaları yeniden adlandırma ve silme, Visual Studio 2013
- 20. Servis yöntemi için adlandırma kuralı
- 21. Rails geçişleri için adlandırma kuralları
- 22. Scala adlandırma seçenekleri için seçenekler
- 23. Yeniden paylaşım için özel adlandırma kuralları tanımlanabilir mi?
- 24. CMake: bir yürütülebilir dosya için gereken tüm .DLL/.SO dosyaları nasıl belirlenir?
- 25. Bir klasördeki ve klasördeki dosyaları yeniden adlandırma Çocuklar
- 26. CSS kurallarını devre dışı bırakma
- 27. android- image adlandırma kuralı: Ad nasıl oluşturulur?
- 28. Git çakışma (yeniden adlandırma/yeniden adlandırma)
- 29. Oracle 12C Audit Trigger Açık Yeniden Adlandırma
- 30. Java yöntemi adlandırma kuralları ve aşırı yükleme
yapabilirsiniz, aynı olmalıdır python kurulumunu bulun.py --help – YOU
@YO U: Teşekkürler, build/lib/temp dizinlerini geçersiz kılmayı başardım, ancak platform eki vb. Ile ilgili hiçbir şey göremiyorum. – hoefling
'python setup.py build --build-platlib .' – YOU