الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

ملف setup.py عند تنصيب المكتبات و Modules

بدأه Dr Isaak Wahb في 25 أبريل 2011 · 13 رد · 2,947 مشاهدة · في لغة Python
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

قبل 3 ايام بدات بتعلم لغة python اجدها لغة سهلة التعلم وسلسة وسريعة

المشكلة انها لا تحتوي على مكتبات كثيرة ومدمجة او على الاقل تحت سقف Python فمعظم المكتبات هي مكتبات خارجية مثل PyPdf PyPoppler PythonMagic انا ذكرت هذه المكتبات لان عملي حاليا مركز عليها بكثرة

هناك عدة طريق لتنصيب هذه المكتبات او الموديلات ودمجها مع Python

في اللينكس الامر يبدو بسيط جدا فقط احتاج الى تطبيق الامر apt-get install package-name في توزيعات debian او اقوم بتحميل source وعمل compile له باوامر configure make make install

يمكن القيام بهذه العملية على الوندوز باستخدام برامج الكومبايلر مثل MS Visual و MinGW لكن الامر ياخذ الكثير من الوقت واحيانا يتطلب تركيب مودول واحد الى تركيب برامج او مكتبات اخرى مساعدة فتدخل في دوامة طويلة قد تحتاج فيها الى تنزيل 10 ملفات سورس

بعد بحث وجدت مقال تحدث عن 3 طرق طريقتين ذكرتهم وهي MS Visual و MinGW والثالثة عن طريق ملف setup.py وتطبيق الامر

python setup.py bdist_wininst

لكن هذا في حال اذا كان مبرمج المكتبة او الموديول قام بانشاء هذا الملف وارفقه مع source والا فانا احتاج الى انشاءه او برمجته بنفسي

حاولت وهذه نتيجة محاولتي مع PythonMagick

import os
from setuptools import setup

def read(fname):
    return open(os.path.join(os.path.dirname(__file__), fname)).read()

setup(
    name = "PythonMagick",
    version = "0.9.5",
    packages=['PythonMagick', 'PythonMagick.PythonMagick_src'],
)

طبعا الكود قمت بالبحث عنه وقمت بالتعديل عليه

لكن عندما يتم انشاء ملف PythonMagick-0.9.5.win32.exe على ما يبدوا انه لا يحتوي على كامل ملفات source وعند تنصيبه يقوم بانشاء مجلد في Lib\site-packages تحت اسم PythonMagick-0.9.5 والذي يحتوي على 3 او 4 ملفات تقريبا

__init__.py
__ini__.pyc
...

لا يتعدى حجم المجلد 3 كيلو بايت

وعند تجربة المكتبة

import _PythonMagick

يظهر لي ان المكتبة غير موجودة وهو كلام صحيح

فكيف اقوم ببرمجة ملف setup.py يقوم بالعمل الصحيح

واتمنى ان ارى تطبيق فعلي على PythonMagick

www.imagemagick.org/download/python/

وشكرا

تم تعديل هذه المشاركة بواسطة Dr Isaak Wahb في 25 أبريل 2011 في 03:52

#2

مش بستخدم ويندوز ولكن في اعتماديات لمكتبات اخرى كثيرة فهل هي متوفرة على نظامك حتى تقوم ببناء الextension منفردا عليها ؟

فإذا متوفرة فتقدر البناء بسهولة -نوعا ما-

http://docs.python.org/distutils/setupscript.html#describing-extension-modules

(map share people)

فضلا لاتقم بمراسلتي من أجل أسئلة لها أقسامها في المنتدى حتى تعم الفائدة على الجميع وللحصول على إجابات أفضل من أعضاء أكثر خبرة.
Weblog
@bitbucket
@xmonader

#3

شكرا لك

لكن على ما يبدو انه من الضروري عمل كومبايل عن طريق MVC او MinGW فقد حصلت اليوم على مكتبة PythonMagick وكانت تحتوي على ملف setup.py فرحت لكن للاسف ايضا يتطلب تنزيل MVC++ وواجهت مشكلة لا اعلم سببها من الصباح وانا احاول لكن لا جدوى هل يمكن احد مساعدتي ؟

bash-3.1$ python setup.py install
GraphicsMagick++ version: 1.3.12
running install
running bdist_egg
running egg_info
creating pgmagick.egg-info
writing pgmagick.egg-info\PKG-INFO
writing top-level names to pgmagick.egg-info\top_level.txt
writing dependency_links to pgmagick.egg-info\dependency_links.txt
writing manifest file 'pgmagick.egg-info\SOURCES.txt'
reading manifest file 'pgmagick.egg-info\SOURCES.txt'
reading manifest template 'MANIFEST.in'
writing manifest file 'pgmagick.egg-info\SOURCES.txt'
installing library code to build\bdist.win32\egg
running install_lib
running build_py
creating build
creating build\lib.win32-2.7
creating build\lib.win32-2.7\pgmagick
copying pgmagick\api.py -> build\lib.win32-2.7\pgmagick
copying pgmagick\__init__.py -> build\lib.win32-2.7\pgmagick
running build_ext
building 'pgmagick._pgmagick' extension
Traceback (most recent call last):
  File "setup.py", line 105, in <module>
    keywords="GraphicsMagick graphics visualize boost image",
  File "c:\Python27\lib\distutils\core.py", line 152, in setup
    dist.run_commands()
  File "c:\Python27\lib\distutils\dist.py", line 953, in run_commands
    self.run_command(cmd)
  File "c:\Python27\lib\distutils\dist.py", line 972, in run_command
    cmd_obj.run()
  File "c:\Python27\lib\site-packages\setuptools\command\install.py", line 76, i
n run
    self.do_egg_install()
  File "c:\Python27\lib\site-packages\setuptools\command\install.py", line 96, i
n do_egg_install
    self.run_command('bdist_egg')
  File "c:\Python27\lib\distutils\cmd.py", line 326, in run_command
    self.distribution.run_command(command)
  File "c:\Python27\lib\distutils\dist.py", line 972, in run_command
    cmd_obj.run()
  File "c:\Python27\lib\site-packages\setuptools\command\bdist_egg.py", line 175
, in run
    cmd = self.call_command('install_lib', warn_dir=0)
  File "c:\Python27\lib\site-packages\setuptools\command\bdist_egg.py", line 161
, in call_command
    self.run_command(cmdname)
  File "c:\Python27\lib\distutils\cmd.py", line 326, in run_command
    self.distribution.run_command(command)
  File "c:\Python27\lib\distutils\dist.py", line 972, in run_command
    cmd_obj.run()
  File "c:\Python27\lib\site-packages\setuptools\command\install_lib.py", line 2
0, in run
    self.build()
  File "c:\Python27\lib\distutils\command\install_lib.py", line 111, in build
    self.run_command('build_ext')
  File "c:\Python27\lib\distutils\cmd.py", line 326, in run_command
    self.distribution.run_command(command)
  File "c:\Python27\lib\distutils\dist.py", line 972, in run_command
    cmd_obj.run()
  File "c:\Python27\lib\site-packages\setuptools\command\build_ext.py", line 46,
 in run
    _build_ext.run(self)
  File "c:\Python27\lib\distutils\command\build_ext.py", line 340, in run
    self.build_extensions()
  File "c:\Python27\lib\distutils\command\build_ext.py", line 449, in build_exte
nsions
    self.build_extension(ext)
  File "c:\Python27\lib\site-packages\setuptools\command\build_ext.py", line 175
, in build_extension
    _build_ext.build_extension(self,ext)
  File "c:\Python27\lib\distutils\command\build_ext.py", line 499, in build_exte
nsion
    depends=ext.depends)
  File "c:\Python27\lib\distutils\msvc9compiler.py", line 473, in compile
    self.initialize()
  File "c:\Python27\lib\distutils\msvc9compiler.py", line 383, in initialize
    vc_env = query_vcvarsall(VERSION, plat_spec)
  File "c:\Python27\lib\distutils\msvc9compiler.py", line 299, in query_vcvarsal
l
    raise ValueError(str(list(result.keys())))
ValueError: [u'path']

على ما يبدو انني يجب ان اعود الى Linux لكن مشكلة Linux انه يحتوي على Python 2.6 وعند تنصيب Python 2.7 فلا يقوم بعمل upgrade فتبقى النسختين معا وهذا امر مقلق حيث عند تركيب المكتبات يتم تركيبها لـ 2.6 وليس 2.7 وعندما قمت بتطبيق امر apt-get remove python2.6 جميع البرامج التي كانت لدي حذفت حتى واجهة المستخدم Gnome حذفت ولم يبقى سوى Terminal مع بعض الاوامر البسيطة :D (اعتقد هذا رد لمن يقول ان البايثون ليس لديها مجال تطبيق كبير فواجهة Gnome والبرامج المساعدة لها مثل Network Manager Gedit ... الخ كلها مبرمجة بـ Python ) تخيل بحذف البايثون ذهب معها كل شيء :D

انتظر المساعدة وشكرا

#4

في لينكس البرامج والمكتبات مرتبطه مع بعضها

وأغلب التوزيعات تبرمج عدد كبير من برامجها وأجزاء واجهاتها ببايثون

لذلك حذفها سيعطل كل ما يعتمد عليها

أيضا البرمجة من خلال بايثون بنظام لينكس أسهل

فمدير الحزم تجد فيه أغلب المكتبات على عكس باقي الأنظمة ..

جرب في الترمنال

python2.7

حيث حددت تشغيل هذا الإصدار

python2.7 setup.py install
#5

صحيح هذا في حال كان يحتوي على ملف setup.py لكن عند تنصيبيه باستخدام apt-get install فيتم تنزيله مباشرة في مكتبة Python 2.6 وايضا عند التركيب عن طريق السورس حتى لو قمت بعمل --prefix=/usr/local/Python2.7

انا احتاج الى استخدام الوندوز لان الامر يتعلق بعمل وانا مجبر على استخدامه للاسف الشديد

هل لاي احد منكم فكرة عن اي مكتبة ملتيميديا تعمل على الوندوز مثل PIL لكن لها امكانية تحويل ملفات PDF الى صور ؟ مع مكتبة PIL الامر ممكن عكسيا فقط اي صورة لملف PDF اما العكس لا (اليس هذا غباء ؟ اسف على التعبير)

#7

الف شكر لك

المكتتبة جدا جدا رائعة وتقوم بالعمل المطلوب لكن للاسف لا تعمل سوى على Python 2.6 او اقدم :(

#8

نعتبرها نقطه إيجابيه..

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

كيف عرفت أنها لا تدعم أحدث من بايثون 6 ؟ إذا ظهرت لك رسالة خطأ ما هي

وحتى لو كانت كذلك ما الضير من إستخدام بايثون 6

إذا كنت ثبتها بويندوز بواسطة المثبت العادي

هلا جربت التثبيت من المصدر

http://wiki.swftools.org/index.php/Python_gfx_tutorial

تم تعديل هذه المشاركة بواسطة sada_rohak في 29 أبريل 2011 في 23:01

#9

شكرا اخي لتعاونك معي

عند تنصيب Swftools.exe يتم عمل مجلدات في مجلد البرنامج

python2.4
python2.5
python2.6

في ملجد python2.6 هناك ملف ياسم gfx.pyd قمت بنسخه داخل مجلد C:\Python27\Lib ثم قمت بتطبيق الامر

python -c "import gfx"

يظهر هذا الخطا

GFX use python2.6.dll which is version conflict

قم بتجربة التركيب عن طريق source لكن يظهر خطا you need zlib to compile علما اني قمت بتركيب zlib1.2.3-win32.exe وقمت ايضا بتركيب اخر اصدار من السورس والخطا هو نفسه نسخت ملف zlib1.dll ونفس الشيء :(

المشكلة اني بدات العمل عند شخص (تدريب) وهو طلب مني العمل على هذا الاصدار وعلى الوندوز لان هذه الاصدارات هي التي متوفرة لديه كي لا يكون هناك تعارض عندما اقوم بارسال الاعمال اليه

انا قمت بمراسلته بهذا الخصوص وسنرى ماهي النتيجة :D

شكرا لتعاونك معي وان كان لك حلول اخرى اكون شاكر لمساعدتك

#10

قمت باستخدام swftools على Python2.6 حتى ارى النتيجة وكانت النتيجة مذهلة فهي تقوم بالعمل الذي اريده تماما لكن جودة الصورة سيئة جدا

#11

وصلت الى حل وسط لكنه فعال وممتاز (من وجهة نظري) وهو استخدام برنامج خارجي عبر دالة

os.popen()

في البايثون والطريقة كالتالي للافادة للجميع

1 - تذهب الى هذا الرابط : http://www.imagemagick.org/script/binary-releases.php#windows

2 - تقوم بتنزيل هذا الملف : ImageMagick-X.X.X-Q16-windows.zip الذي يحتوي على ملفات ImageMagick ويمكن استخدامها بدون تنصيب اي انها Portable Files

3 - تقوم بفك الضغط ثم تقوم بنسخ المجلد الذي يحتوي على الملفات الى مسار البرنامج او الموديول الذي تعمل عليه

4 - تقوم باستخدام دالة os.popen بهذه الطريقة

os.popen(ImageMagickPath+"/convert.exe -layers flatten -density 150 "+PDFPath+"["+str(page)+"] PNG:"+PNGPath+"/PDF/"+str(page+1)+"/IMG.png")

لقد قمت باضافة المتغير page هنا حتى يمكن استخدامه مع ملفات pdf بشكل عام والتي من الممكن ان تحتوي على اكثر من صفحة

شكرا لكم

واتمنى ان يستفيد الجميع من تجربتي

سلام عليكم

تم تعديل هذه المشاركة بواسطة Dr Isaak Wahb في 1 مايو 2011 في 01:05

#12

أشكرك أخي على مشاركتنا تجربتك وبالتأكيد سأحتاجها يوما من الأيام

يوجد api لعدة لغات برمجة

أنصحك بإستخدامها

http://www.imagemagick.org/script/api.php#python

from pythonmagickwand.image import Image
i = Image('foo.jpg')
i.format = 'PNG'
i.flip()
i.save('flip.png')

المثال مأخوذ من هذه الصفحة

http://www.assembla.com/wiki/show/pythonmagickwand

أظن أنه ألذ من المكرونة التي عملتها :lol:

#13

شكرا لطرحك لهذا الاقتراح.

لقد قمت بالفعل بمحاولة تنصيب PythonMagick عن طريق السورس وواجهت مشكلة عدم ايجاد Boost Compiler علما اني قمت بتركيبه وحاولت معه بشتى الطرق لكن للاسف دخلت في دوامة طويلة فيجب تنصيب boost-lib وعند تنصيب boost-lib يطلب boost-dev واعتقد ايضا طلب مني تنصيب Perl ... الخ فدخلنا في دوامة طويلة لو كانت على linux لم تكن ان تكون مشكلة فلم يكن لي حل غير البقاء على هذا الحل

لكن لو نظرنا بالفعل في ملفات PythonMagick ونظرنا في الدوال فانا اعتقد انه يستخدم نفس الطريقة التي طرحتها عن طريق os.popen نظرا انه يتطلب تركيب ImageMagick حتى يعمل PythonMagick اي انها ليست مكتبة مستقلة تعتمد على اكود python 100%

تعديل : ماسبق ينطبق على PythonMagick وليس PythonMagickWand الذي قمت بطرحه سوف اقوم بالتجربة ثم اعود من جديد :)

شكرا لك

تم تعديل هذه المشاركة بواسطة Dr Isaak Wahb في 1 مايو 2011 في 14:41

#14

اسف على تاخري

لقد قمت بمحاولة تنصيب PythonMagickWand لكن واجهت مشكلة كالعادة مع الكومبايل الامر سهل مع لينكس لكن مع وندوز يحتاج الكثير من الصبر ونظرا اني وجدت الطريقة التي اقترحتها باستخدام ImageMagick Portable File تقوم الغرض الذي اريده وسهلة الاستخدام لم احاول كثيرا مع PythonMagickWand (للصراحة :D)

شكرا لكم جميعا واتمنى ان يستفيد الجميع من هذه التجربة ايضا هنا ايضا طرحا العديد من الحلول والمكتبات ويمكن الاستفادة منها

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…