मैं पाइथन मॉड्यूल से साझा ऑब्जेक्ट उत्पन्न करने के लिए साइथन का उपयोग कर रहा हूं। संकलन आउटपुट build/lib.linux-x86_64-3.5/<Package>/<module>.cpython-35m-x86_64-linux-gnu.so
पर लिखा गया है। नामकरण नियम बदलने के लिए कोई विकल्प है? मैं चाहता हूं कि फ़ाइल को दुभाषिया संस्करण या आर्क परिशिष्ट के बिना <module>.so
नाम दिया जाए।.so फ़ाइलों के लिए साइथन के नामकरण नियम बदलें
उत्तर
setuptools
जैसा लगता है कि प्रत्यय को पूरी तरह से बदलने या छुटकारा पाने का कोई विकल्प नहीं है। जादू distutils/command/build_ext.py
में क्या होता है:
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
लगता है जैसे मैं एक के बाद निर्माण का नाम बदलने कार्रवाई जोड़ने की आवश्यकता होगी।
2016/08/12 सेअद्यतन:
ठीक है, मैं वास्तव में समाधान पोस्ट करने के लिए भूल गया था। असल में, मैंने install_lib
कमांड को ओवरलोड करके एक नामकरण क्रिया लागू की।
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]
अब तुम सब करने की है है setup
समारोह में आदेश ओवरलोड:: मैं मानक आदेशों अधिक भार के साथ खुश नहीं हूँ
setup(
...
cmdclass={
'install_lib': _CommandInstallCythonized,
},
...
)
फिर भी,; यहाँ तर्क है अगर आपको एक बेहतर समाधान मिल जाए, तो इसे पोस्ट करें और मैं आपका जवाब स्वीकार करूंगा।
यह व्यवहार distutils पैकेज में परिभाषित किया गया है। distutils sysconfig और "EXT_SUFFIX" config चर का उपयोग करता है:
# 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
अजगर 3.5 के साथ शुरू "EXT_SUFFIX" चर मंच जानकारी, उदाहरण के लिए ".cp35-win_amd64" शामिल हैं। आदेश 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
और कस्टम :
मैं निम्नलिखित समारोह में लिखा है
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)
उपयोग: के रूप में setuptools विकल्पों का निर्माण
setup(
...
cmdclass={'build_ext': BuildExtWithoutPlatformSuffix},
...
)
आपके कोड ने मेरी मदद की। धन्यवाद! – q0987
- 1. एंड्रॉइड संसाधनों के लिए नामकरण नियम
- 2. आंशिक कक्षा फ़ाइलों के लिए नामकरण सम्मेलन
- 3. नामकरण नियम उल्लंघन
- 4. .so और .a फ़ाइलों के बीच क्या अंतर है?
- 5. रेल के हिस्सों के पीछे नामकरण नियम क्या है?
- 6. सी # नामकरण सम्मेलनों के लिए नामकरण सम्मेलन
- 7. क्या एकल-मॉड्यूल पायथन पैकेज नामकरण के नियम हैं?
- 8. लिनक्स में स्थिर पुस्तकालयों के लिए lib {library name} .a/.so नामकरण सम्मेलन है?
- 9. क्लोजर में सामान्य नामकरण नियम क्या है?
- 10. सी ++ नेमस्पेस उपयोग और नामकरण नियम
- 11. डेटाबेस मेटाडेटा नामकरण के लिए स्टाइल गाइड
- 12. SO
- 13. SO
- 14. धागे के लिए नामकरण सम्मेलन?
- 15. लिथिंग के लिए विकल्प साइथन कोड
- 16. ऑब्जेक्ट सदस्यों के लिए साइथन बफर घोषणाएं
- 17. साइथन उपयोगकर्ताओं के लिए अजीब प्रकार
- 18. सर्वश्रेष्ठ दृष्टिकोण अलग .js फ़ाइलों में जावास्क्रिप्ट कार्यों के लिए संघर्ष नामकरण से बचने के लिए?
- 19. पाइथन/साइथन
- 20. विस्तारित पायथन - स्विंग करने के लिए, स्विंग या साइथन
- 21. साइथन
- 22. साइथन
- 23. साइथन
- 24. साइथन
- 25. साइथन
- 26. साइथन
- 27. साइथन
- 28. साइथन
- 29. साइथन
- 30. साइथन
एक ही होना चाहिए, आप कर सकते हैं इसे python setup.py --help – YOU
@YO में ढूंढें यू: धन्यवाद, मैं बिल्ड/lib/temp निर्देशिकाओं को ओवरराइड करने में कामयाब रहा, लेकिन मुझे प्लेटफ़ॉर्म प्रत्यय आदि से संबंधित कुछ भी दिखाई नहीं देता है। – hoefling
'python setup.py build --build-platlib। – YOU