اذهب إلى المحتوى

السؤال

نشر

السلام عليكم..

 

بينما كنت أطبق احد مشاريع الذكاء الاصطناعي الموجودة في كتاب عشرة مشاريع عشرة-مشاريع-عملية-عن-الذكاء-الاصطناعي-أكاديمية-حسوب وبالتحديد مشروع تحليل المشاعر في النصوص العربية حيث وبدأ بانشاء مجلد للمشروع باسم sa وبداخله نفذنا أمر انشاء بيئة

python -m venv sa

ثم ولأنني استخدم لينكس فقد استخدمت الامر التالي لتفعيل البيئة بحسب ما ذكره الكتاب: 

source sa/bin/activate

ثم أنشأت ملف اسمه requirements.txt وبداخله وضعت التالي: 
 

jupyter==1.0.0
keras==2.6.0
Keras-Preprocessing==1.1.2
matplotlib==3.5.1
nltk==3.6.5
numpy==1.19.5
pandas==1.3.5
scikit-learn==1.0.1
seaborn==0.11.2
sklearn==0.0
snowballstemmer==2.2.0
tensorflow==2.6.0
wordcloud==1.8.1
python-bidi==0.4.2
arabic-reshaper==2.1.3

 

ثم اغلقت الملف ونفذت السطر التالي لتحميل المكتبات والاعتماديات السابقة:
 

pip install -r requirements.txt

 

وثم ظهر التالي:

image.thumb.png.4336f7c95f7c5981edee382e57829761.png

 

والذي لاحظته انه يقوم بتحميل اول 5 مكتبات تقريبا (اي يصل الى مكتبة numpy ومن ثم يظهر الخطا) 

 

وهذا نص الخطأ كاملا:
 

(sa) ouis@fedora:~/Student/AI practical/Ai project/sa/sa$ pip install -r requirements.txt
Collecting jupyter==1.0.0 (from -r requirements.txt (line 2))
  Using cached jupyter-1.0.0-py2.py3-none-any.whl (2.7 kB)
Collecting keras==2.6.0 (from -r requirements.txt (line 3))
  Using cached keras-2.6.0-py2.py3-none-any.whl (1.3 MB)
Collecting Keras-Preprocessing==1.1.2 (from -r requirements.txt (line 4))
  Using cached Keras_Preprocessing-1.1.2-py2.py3-none-any.whl (42 kB)
Collecting matplotlib==3.5.1 (from -r requirements.txt (line 5))
  Using cached matplotlib-3.5.1.tar.gz (35.3 MB)
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
  Installing backend dependencies ... done
  Preparing metadata (pyproject.toml) ... done
Collecting nltk==3.6.5 (from -r requirements.txt (line 6))
  Using cached nltk-3.6.5-py3-none-any.whl (1.5 MB)
Collecting numpy==1.19.5 (from -r requirements.txt (line 7))
  Using cached numpy-1.19.5.zip (7.3 MB)
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
ERROR: Exception:
Traceback (most recent call last):
  File "/home/ouis/Student/AI practical/Ai project/sa/sa/lib64/python3.12/site-packages/pip/_internal/cli/base_command.py", line 180, in exc_logging_wrapper
    status = run_func(*args)
             ^^^^^^^^^^^^^^^
  File "/home/ouis/Student/AI practical/Ai project/sa/sa/lib64/python3.12/site-packages/pip/_internal/cli/req_command.py", line 245, in wrapper
    return func(self, options, args)
           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/ouis/Student/AI practical/Ai project/sa/sa/lib64/python3.12/site-packages/pip/_internal/commands/install.py", line 377, in run
    requirement_set = resolver.resolve(
                      ^^^^^^^^^^^^^^^^^
  File "/home/ouis/Student/AI practical/Ai project/sa/sa/lib64/python3.12/site-packages/pip/_internal/resolution/resolvelib/resolver.py", line 95, in resolve
    result = self._result = resolver.resolve(
                            ^^^^^^^^^^^^^^^^^
  File "/home/ouis/Student/AI practical/Ai project/sa/sa/lib64/python3.12/site-packages/pip/_vendor/resolvelib/resolvers.py", line 546, in resolve
    state = resolution.resolve(requirements, max_rounds=max_rounds)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/ouis/Student/AI practical/Ai project/sa/sa/lib64/python3.12/site-packages/pip/_vendor/resolvelib/resolvers.py", line 397, in resolve
    self._add_to_criteria(self.state.criteria, r, parent=None)
  File "/home/ouis/Student/AI practical/Ai project/sa/sa/lib64/python3.12/site-packages/pip/_vendor/resolvelib/resolvers.py", line 173, in _add_to_criteria
    if not criterion.candidates:
           ^^^^^^^^^^^^^^^^^^^^
  File "/home/ouis/Student/AI practical/Ai project/sa/sa/lib64/python3.12/site-packages/pip/_vendor/resolvelib/structs.py", line 156, in __bool__
    return bool(self._sequence)
           ^^^^^^^^^^^^^^^^^^^^
  File "/home/ouis/Student/AI practical/Ai project/sa/sa/lib64/python3.12/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py", line 155, in __bool__
    return any(self)
           ^^^^^^^^^
  File "/home/ouis/Student/AI practical/Ai project/sa/sa/lib64/python3.12/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py", line 143, in <genexpr>
    return (c for c in iterator if id(c) not in self._incompatible_ids)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/ouis/Student/AI practical/Ai project/sa/sa/lib64/python3.12/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py", line 47, in _iter_built
    candidate = func()
                ^^^^^^
  File "/home/ouis/Student/AI practical/Ai project/sa/sa/lib64/python3.12/site-packages/pip/_internal/resolution/resolvelib/factory.py", line 182, in _make_candidate_from_link
    base: Optional[BaseCandidate] = self._make_base_candidate_from_link(
                                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/ouis/Student/AI practical/Ai project/sa/sa/lib64/python3.12/site-packages/pip/_internal/resolution/resolvelib/factory.py", line 228, in _make_base_candidate_from_link
    self._link_candidate_cache[link] = LinkCandidate(
                                       ^^^^^^^^^^^^^^
  File "/home/ouis/Student/AI practical/Ai project/sa/sa/lib64/python3.12/site-packages/pip/_internal/resolution/resolvelib/candidates.py", line 293, in __init__
    super().__init__(
  File "/home/ouis/Student/AI practical/Ai project/sa/sa/lib64/python3.12/site-packages/pip/_internal/resolution/resolvelib/candidates.py", line 156, in __init__
    self.dist = self._prepare()
                ^^^^^^^^^^^^^^^
  File "/home/ouis/Student/AI practical/Ai project/sa/sa/lib64/python3.12/site-packages/pip/_internal/resolution/resolvelib/candidates.py", line 225, in _prepare
    dist = self._prepare_distribution()
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/ouis/Student/AI practical/Ai project/sa/sa/lib64/python3.12/site-packages/pip/_internal/resolution/resolvelib/candidates.py", line 304, in _prepare_distribution
    return preparer.prepare_linked_requirement(self._ireq, parallel_builds=True)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/ouis/Student/AI practical/Ai project/sa/sa/lib64/python3.12/site-packages/pip/_internal/operations/prepare.py", line 525, in prepare_linked_requirement
    return self._prepare_linked_requirement(req, parallel_builds)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/ouis/Student/AI practical/Ai project/sa/sa/lib64/python3.12/site-packages/pip/_internal/operations/prepare.py", line 640, in _prepare_linked_requirement
    dist = _get_prepared_distribution(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/ouis/Student/AI practical/Ai project/sa/sa/lib64/python3.12/site-packages/pip/_internal/operations/prepare.py", line 71, in _get_prepared_distribution
    abstract_dist.prepare_distribution_metadata(
  File "/home/ouis/Student/AI practical/Ai project/sa/sa/lib64/python3.12/site-packages/pip/_internal/distributions/sdist.py", line 54, in prepare_distribution_metadata
    self._install_build_reqs(finder)
  File "/home/ouis/Student/AI practical/Ai project/sa/sa/lib64/python3.12/site-packages/pip/_internal/distributions/sdist.py", line 124, in _install_build_reqs
    build_reqs = self._get_build_requires_wheel()
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/ouis/Student/AI practical/Ai project/sa/sa/lib64/python3.12/site-packages/pip/_internal/distributions/sdist.py", line 101, in _get_build_requires_wheel
    return backend.get_requires_for_build_wheel()
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/ouis/Student/AI practical/Ai project/sa/sa/lib64/python3.12/site-packages/pip/_internal/utils/misc.py", line 751, in get_requires_for_build_wheel
    return super().get_requires_for_build_wheel(config_settings=cs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/ouis/Student/AI practical/Ai project/sa/sa/lib64/python3.12/site-packages/pip/_vendor/pyproject_hooks/_impl.py", line 166, in get_requires_for_build_wheel
    return self._call_hook('get_requires_for_build_wheel', {
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/ouis/Student/AI practical/Ai project/sa/sa/lib64/python3.12/site-packages/pip/_vendor/pyproject_hooks/_impl.py", line 321, in _call_hook
    raise BackendUnavailable(data.get('traceback', ''))
pip._vendor.pyproject_hooks._impl.BackendUnavailable: Traceback (most recent call last):
  File "/home/ouis/Student/AI practical/Ai project/sa/sa/lib64/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 77, in _build_backend
    obj = import_module(mod_path)
          ^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib64/python3.12/importlib/__init__.py", line 90, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "<frozen importlib._bootstrap>", line 1387, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1310, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed
  File "<frozen importlib._bootstrap>", line 1387, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1331, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 935, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 994, in exec_module
  File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed
  File "/tmp/pip-build-env-8wa4lfgk/overlay/lib/python3.12/site-packages/setuptools/__init__.py", line 18, in <module>
    from setuptools.extern.six import PY3, string_types
ModuleNotFoundError: No module named 'setuptools.extern.six'

وخالص شكري مقدما.

Recommended Posts

  • 1
نشر

يظهر خطأ ModuleNotFoundError: No module named 'setuptools.extern.six' حاول تثبيت الحزمة setuptools من خلال:

pip install --upgrade setuptools pip

ثم:

pip install setuptools

ثم حاول مجددًا:

pip install -r requirements.txt

وإن استمرت المشكلة حاول تثبيت الإعتماديات التالية:

sudo apt-get install python3-dev python3-pip

ثم:

pip install wheel

بعد ذلك حاول مجددًا.

وإن استمرت المشكلة حاول تثبيت إصدار أحدث من numpy بتعديله في ملف requirements :

numpy==1.22

 

  • 0
نشر
بتاريخ 56 دقائق مضت قال Mustafa Suleiman:

يظهر خطأ ModuleNotFoundError: No module named 'setuptools.extern.six' حاول تثبيت الحزمة setuptools من خلال:

pip install --upgrade setuptools pip

ثم:

pip install setuptools

ثم حاول مجددًا:

pip install -r requirements.txt

وإن استمرت المشكلة حاول تثبيت الإعتماديات التالية:

sudo apt-get install python3-dev python3-pip

ثم:

pip install wheel

بعد ذلك حاول مجددًا.

وإن استمرت المشكلة حاول تثبيت إصدار أحدث من numpy بتعديله في ملف requirements :

numpy==1.22

 

حاولت كل الطرق التي ذكرتها ووصلت للأخيرة(تتغير اصدار ال numpy) وظهر لي التالي:
image.thumb.png.9fab278f25bbdf0893d8b80c9658e7b9.png

بتاريخ منذ ساعة مضت قال Mustafa Suleiman:

يظهر خطأ ModuleNotFoundError: No module named 'setuptools.extern.six' حاول تثبيت الحزمة setuptools من خلال:

pip install --upgrade setuptools pip

ثم:

pip install setuptools

ثم حاول مجددًا:

pip install -r requirements.txt

وإن استمرت المشكلة حاول تثبيت الإعتماديات التالية:

sudo apt-get install python3-dev python3-pip

ثم:

pip install wheel

بعد ذلك حاول مجددًا.

وإن استمرت المشكلة حاول تثبيت إصدار أحدث من numpy بتعديله في ملف requirements :

numpy==1.22

 

استاذ @Mustafa Suleiman ماذا اذا قمت بتثبيت مكتبة ال numpy بشكل منفصل بحيث لا أحدد الاصدار وثم أحذفها من الملف النصي requirements.txt ؟؟

هل هذا مسوح به ؟

  • 0
نشر
بتاريخ 18 دقائق مضت قال Mustafa Suleiman:

عليك تحميل وتثبيت Build Tools for Visual Studio من خلال الرابط التالي:

وماذا يفعل هذا ؟؟؟
لقد حملته وثبته وعرفت انه الاصدار الاخير من ال .net 
وللمعلومية الاصدار السابق كان مثبت لدي من قبل 

بتاريخ 40 دقائق مضت قال Ouis Alhetar:

استاذ @Mustafa Suleiman ماذا اذا قمت بتثبيت مكتبة ال numpy بشكل منفصل بحيث لا أحدد الاصدار وثم أحذفها من الملف النصي requirements.txt ؟؟

هل هذا مسوح به ؟

وكل التقدير لجهودك استاذنا.

  • 0
نشر

وعليكم السلام ورحمة الله سيّد أويس. أعجبني هذا السؤال كثيرا لأنه يوضّح الخطوات التي قمت بها بالتفصيل ويسمح لنا بتكرارها بنفس الطريقة.

يبدو أن الكتاب الذي تعتمد عليه قد كتب منذ مدّة طويلة نسبيّا، وبما أن إصدارات بايثون والمكتبات الأخرى تتغيّر كل بضعة أشهر (أو ربما بضع أسابيع) فهذا الخطأ يحصل بسبب أن بعض تلك المكتبات بالإصدارات الموجودة في requirements.txt قد صارت غير متوافقة حاليّا.

أوّلا، لاحظت من رسائل الخطأ أنّك تستخدم Python 3.12، وكما شرحت في جواب سابق، أن TensorFlow لا يعمل على هذه النسخة بعد. لذلك لا مفر من استخدام إصدار أقدم من Python.

ثانيّا، بالنسبة للسطر:

sklearn==0.0

فهذا لا معنى له ويجب حذفه، لأن مكتبة Scikit Learn تسمى حاليّا:

scikit-learn

أما بالنسبة للخطأ، فأغلب الظن أنه يحدث بسبب أن المكتبات المستخدمة قديمة. لقد حاولت تثبيت الاعتماديات التي وضعتها هنا مع إصداراتها وقد حصل عندي خطأ (على Python 3.10) وجدت أن مصدره هو Scikit-learn (حتى وإن ظهر أنه يحصل عند Numpy، لأن Scikit-learn يعتمد عليه). قد يكون أسرع حل هو حذف كل أرقام الإصدارات من الملف requirements.txt والإبقاء على أسماء المكتبات فقط لكي يتم تثبيت الإصدارات الحاليّة. لذلك نجعل ملف الاعتماديّات بهذا الشكل:

jupyter
keras
Keras-Preprocessing
matplotlib
nltk
numpy
pandas
scikit-learn
seaborn
snowballstemmer
tensorflow
wordcloud
python-bidi
arabic-reshaper

ثم نشغل الأمرين (الأمر الأول مهم لتحديث pip، حصل عندي خطأ AssertionError عند عدم القيام به):

pip install -U pip
pip install -r requirements.txt 

ننتظر بعد ذلك (مدّة طويلة جدّا!) حتى يتم تنزيل وبناء الاعتماديّات. من المفترض أن تتم العمليّة بنجاح.

ربّما قد تقع في حالات تحاول فيها تشغيل الشفرة الموجودة في ذلك الكتاب وقد لا تنجح لأن الإصدارات التي قمنا بتثبيتها مختلفة عن التي يستخدمها ذلك الكتاب. في هذه الحالات علينا البحث مرّة أخرى عن كيفيّة تغيير الشفرة حتى تتوافق مع الإصدارات الجديدة.

  • 0
نشر
بتاريخ 12 ساعة قال حمزة عباد:

وعليكم السلام ورحمة الله سيّد أويس. أعجبني هذا السؤال كثيرا لأنه يوضّح الخطوات التي قمت بها بالتفصيل ويسمح لنا بتكرارها بنفس الطريقة.

يبدو أن الكتاب الذي تعتمد عليه قد كتب منذ مدّة طويلة نسبيّا، وبما أن إصدارات بايثون والمكتبات الأخرى تتغيّر كل بضعة أشهر (أو ربما بضع أسابيع) فهذا الخطأ يحصل بسبب أن بعض تلك المكتبات بالإصدارات الموجودة في requirements.txt قد صارت غير متوافقة حاليّا.

أوّلا، لاحظت من رسائل الخطأ أنّك تستخدم Python 3.12، وكما شرحت في جواب سابق، أن TensorFlow لا يعمل على هذه النسخة بعد. لذلك لا مفر من استخدام إصدار أقدم من Python.

ثانيّا، بالنسبة للسطر:

sklearn==0.0

فهذا لا معنى له ويجب حذفه، لأن مكتبة Scikit Learn تسمى حاليّا:

scikit-learn

أما بالنسبة للخطأ، فأغلب الظن أنه يحدث بسبب أن المكتبات المستخدمة قديمة. لقد حاولت تثبيت الاعتماديات التي وضعتها هنا مع إصداراتها وقد حصل عندي خطأ (على Python 3.10) وجدت أن مصدره هو Scikit-learn (حتى وإن ظهر أنه يحصل عند Numpy، لأن Scikit-learn يعتمد عليه). قد يكون أسرع حل هو حذف كل أرقام الإصدارات من الملف requirements.txt والإبقاء على أسماء المكتبات فقط لكي يتم تثبيت الإصدارات الحاليّة. لذلك نجعل ملف الاعتماديّات بهذا الشكل:

jupyter
keras
Keras-Preprocessing
matplotlib
nltk
numpy
pandas
scikit-learn
seaborn
snowballstemmer
tensorflow
wordcloud
python-bidi
arabic-reshaper

ثم نشغل الأمرين (الأمر الأول مهم لتحديث pip، حصل عندي خطأ AssertionError عند عدم القيام به):

pip install -U pip
pip install -r requirements.txt 

ننتظر بعد ذلك (مدّة طويلة جدّا!) حتى يتم تنزيل وبناء الاعتماديّات. من المفترض أن تتم العمليّة بنجاح.

ربّما قد تقع في حالات تحاول فيها تشغيل الشفرة الموجودة في ذلك الكتاب وقد لا تنجح لأن الإصدارات التي قمنا بتثبيتها مختلفة عن التي يستخدمها ذلك الكتاب. في هذه الحالات علينا البحث مرّة أخرى عن كيفيّة تغيير الشفرة حتى تتوافق مع الإصدارات الجديدة.

والله كل الشكر....

بس ولو ازعجتك استاذ @حمزة عباد  ،،،،،،
من أجل تثبيت نسخة أقدم من بايثون بدون الاضرار بالنسخة الحالية فهل أستخدم دوكر مثلا ؟؟
واذا أمكن استخدام دوكر فكيف أربط هذه النسخة بالــ vs code ( وأنوه بأني استطيع تحميل الـ image في دوكر وتشغيلها ولكن لا أدري كيف اشغلها في vs code )

  • 1
نشر
بتاريخ 13 ساعة قال Ouis Alhetar:

والله كل الشكر....

بس ولو ازعجتك استاذ @حمزة عباد  ،،،،،،
من أجل تثبيت نسخة أقدم من بايثون بدون الاضرار بالنسخة الحالية فهل أستخدم دوكر مثلا ؟؟
واذا أمكن استخدام دوكر فكيف أربط هذه النسخة بالــ vs code ( وأنوه بأني استطيع تحميل الـ image في دوكر وتشغيلها ولكن لا أدري كيف اشغلها في vs code )

مرحبا، لا يوجد أي إزعاج، هذا واجبي.

استخدام Docker فكرة جيّدة وتعمل في جميع هذه الحالات. لكن بما أنّك على Linux (وهذا اختيار ممتاز للبرمجة!) يمكنك استخدام أداة pyenv حيث تسمح لك بتثبيت نسخ إضافية من بايثون بدون التأثيرعلى النسخة الحاليّة.

حسب التوثيق الرسمي للأداة، يمكن تثبيتها عن طريق:

curl https://pyenv.run | bash

ثم التعديل على إعدادات Bash عن طريق الأوامر:

echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc

ثم بعد ذلك تحتاج إلى التأكّد من تنزيل إعتماديّات بناء Python. إذا كنت على Debian أو Ubuntu أو أحد مشتقاتهما يمكن القيام بذلك عن طريق الأمر:

sudo apt update; sudo apt install build-essential libssl-dev zlib1g-dev \
libbz2-dev libreadline-dev libsqlite3-dev curl \
libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev

بعد ذلك، افتح نافذة طرفيّة جديدة، واستخدم الأمر التالي لتثبيت نسخة محددة من بايثون:

pyenv install 3.11

والآن لتشغيل إصدار بايثون الذي قمنا بتنزيله، توجد عدّة طرق، لكن أكثرها نظافة هي (حيث تؤثّر على الصدفة Shell الحالية فقط وليس على كامل النظام):

pyenv shell 3.11

بعد ذلك، تأكّد من أن الإصدار الصحيح تمّ تفعيله عن طريق:

python --version

يمكنك الاطلاع على المزيد من المعلومات على توثيق Pyenv الرسمي.

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...