الشيفرة التي وضعتها تعتمد على وظيفة has_key()
التي كانت موجودة في Python 2 وتستخدم لفحص ما إذا كان المفتاح موجودًا في القاموس أو لا. ومع ذلك، في Python 3، تمت إزالة هذه الوظيفة وبدلاً من ذلك يمكن استخدام in
لفحص وجود المفتاح في القاموس.
لذا، لتعديل الشيفرة لتعمل على Python 3.5، يجب أن نستبدل استخدام has_key()
بفحص باستخدام in
. هناك أيضًا بعض التغييرات الأخرى التي يجب القيام بها لضمان توافق الشيفرة مع Python 3.5.
الشيفرة المعدلة قد تبدو مثل هذا:
pythonimport os
import sysconfig
def finalize_options(self):
if self.cross_compile and 'PYTHONXCPREFIX' in os.environ:
prefix = os.environ['PYTHONXCPREFIX']
sysconfig.get_python_lib = get_python_lib
sysconfig.PREFIX = prefix
sysconfig.EXEC_PREFIX = prefix
# reinitialize variables
sysconfig._config_vars = None
sysconfig.get_config_var("LDSHARED")
_build.finalize_options(self)
بالتالي، تم استبدال os.environ.has_key('PYTHONXCPREFIX')
بـ 'PYTHONXCPREFIX' in os.environ
، وهو التعبير الذي يفحص ما إذا كان المفتاح ‘PYTHONXCPREFIX’ موجودًا في القاموس os.environ
.
وبالتالي، بعد التعديل، يجب أن يكون الشيفرة متوافقة مع Python 3.5 والإصدارات الأحدث من Python.
المزيد من المعلومات
بعد التعديلات المقترحة، يمكن أن تبدو الشيفرة على النحو التالي:
pythonimport os
import sysconfig
def finalize_options(self):
if self.cross_compile and 'PYTHONXCPREFIX' in os.environ:
prefix = os.environ['PYTHONXCPREFIX']
sysconfig.get_python_lib = get_python_lib
sysconfig.PREFIX = prefix
sysconfig.EXEC_PREFIX = prefix
# Reinitialize variables
sysconfig._config_vars = None
sysconfig.get_config_var("LDSHARED")
_build.finalize_options(self)
بعد تطبيق هذه التغييرات، يجب أن تعمل الشيفرة بشكل صحيح على Python 3.5 دون إثارة أي استثناءات. قامت التغييرات الرئيسية بتحويل الفحص من os.environ.has_key('PYTHONXCPREFIX')
إلى 'PYTHONXCPREFIX' in os.environ
، والذي يتوافق مع تغييرات Python 3 في تعامله مع القواميس.
إذا كنت تعمل على تحديث الشيفرة لتكون متوافقة مع نسخ Python الأحدث، فمن المفيد أيضًا التحقق من وثائق Python الرسمية لضمان أنه تم معالجة جميع التغييرات اللازمة لنسخة محددة. هذا يساعد على ضمان أن الشيفرة تعمل بشكل صحيح وفعّال على جميع البيئات المستهدفة.