পাইথন 3: আমদানি ত্রুটি: মডিউল মাল্টিপ্রসেসিং থেকে মান ব্যবহার করার সময় '_ctypes' নামে কোনও মডিউল নেই


127

আমি উবুন্টু ব্যবহার করছি এবং পাইথন 2.7.5 এবং 3.4.0 ইনস্টল করেছি। পাইথন ২.7.৫ এ আমি সাফল্যের সাথে একটি ভেরিয়েবল বরাদ্দ করতে সক্ষম x = Value('i', 2), কিন্তু ৩.৪.০-তে না। আমি পাচ্ছি:

Traceback (most recent call last):
   File "<stdin>", line 1, in <module>
   File "/usr/local/lib/python3.4/multiprocessing/context.py", line 132, in Value
      from .sharedctypes import Value
   File "/usr/local/lib/python3.4/multiprocessing/sharedctypes.py", line 10, in <
module>
   import ctypes
   File "/usr/local/lib/python3.4/ctypes/__init__.py", line 7, in <module>
      from _ctypes import Union, Structure, Array
ImportError: No module named '_ctypes'

আমি সবেমাত্র 3.4.0 এর উত্স ইনস্টল করার মাধ্যমে 3.3.2 এ আপডেট করেছি। এটি /usr/local/lib/python3.4 এ ইনস্টল করা হয়েছে ।

আমি কি পাইথন ৩.৪ এ সঠিকভাবে আপডেট করেছি?

একটা জিনিষ আমি লক্ষ্য করেছি যে পাইথন 3.4 মধ্যে ইনস্টল করা হয় usr ডিরেক্টরির / local / lib , যখন পাইথন 3.3.2 এখনও ইনস্টল করা usr / lib , তাই এটি ওভাররাইট করা হয় নি।


এটি "3.4.0 এর উত্স ইনস্টল করার" সময় কিছু ভ্রষ্ট হয়েছে বলে মনে হয়। এর আসল অর্থ কি? এই কমান্ডটি 3.3.2 এ কাজ করছিল?
যান্ত্রিক_মেট

আমি সূডো মেক ইনস্টল কমান্ড ব্যবহার করে উত্স কোড থেকে ইনস্টল করেছি। হ্যাঁ মাল্টিপ্রসেসিং থেকে মান আমদানি 3.3.2
htc_m8

8
_ctypesনির্মিত হয়নি কারণ libffi-devনির্ভরতা উপলব্ধ ছিল না। পরিবর্তে ডেডসনেকস পিপিএ ব্যবহার করার বিষয়ে বিবেচনা করুন ।
এরিক সান

11
লিবিফি-ডেভ ইনস্টল করা এবং পাইথন 3.4 পুনরায় ইনস্টল করা আমার জন্য সমস্যাটি স্থির করে
htc_m8

উত্তর:


226

libffi-devপাইথন 3.7 ইনস্টল এবং পুনরায় ইনস্টল করা আমার জন্য সমস্যাটি স্থির করে।

পরিষ্কারভাবে পাই তৈরি করতে 3.7 libffi-dev প্রয়োজনীয় বা অন্যথায় জিনিসগুলি ব্যর্থ হবে

যদি RHEL / ফেডোরা ব্যবহার করে:

yum install libffi-devel

অথবা

sudo dnf install libffi-devel

যদি ডেবিয়ান / উবুন্টু ব্যবহার করে থাকেন:

sudo apt-get install libffi-dev

35
আমি ইনস্টল করেছি libffi-devতবে আমি এখনও এই ত্রুটিটি
পাচ্ছি

1
আপনি যদি লিনাক্স are ব্যবহার করেন তবে নতুনটি ldconfigলোড করতে এক্সিকিউট করুন libffi.so। এর মূল উদ্দেশ্য apt-get install libffi-devহ'ল একটি ফাইল ইনস্টল করা libffi.soযা আপনি এটি dpkg -L libffi-dev@tushar_ecmc দ্বারা পরীক্ষা করতে পারবেন
xue

14
মনে রাখবেন যে আপনি যদি পাইথন বিতরণটির নিজস্ব সংকলন করেন (যেমন মাধ্যমে pyenv install), আপনাকে প্যাকেজ ইনস্টল করার পরে বিতরণটি পুনরায় সংকলন করতে হবে।
এ্যাডেড করা হয়েছে

121

একটি তাজা দেবিয়ান চিত্রে, https://github.com/python/cpython ক্লোনিং করে চলছে:

sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade
sudo apt-get install build-essential python-dev python-setuptools python-pip python-smbus
sudo apt-get install libncursesw5-dev libgdbm-dev libc6-dev
sudo apt-get install zlib1g-dev libsqlite3-dev tk-dev
sudo apt-get install libssl-dev openssl
sudo apt-get install libffi-dev

এখন configureউপরে ক্লোন করা ফাইলটি কার্যকর করুন :

./configure
make # alternatively `make -j 4` will utilize 4 threads
sudo make altinstall

আমার কাছে 3.7 ইনস্টল হয়েছে এবং কাজ করছে।

হালকা আপডেট

দেখে মনে হচ্ছে আমি এই উত্তরটি আরও কিছু ব্যাখ্যা দিয়ে আপডেট করব এবং দু'বছর পরে আমার আর যোগ করার মতো কিছুই নেই।

  • এই এসও পোস্টটি ব্যাখ্যা করে যে নির্দিষ্ট লাইব্রেরিগুলির কেন python-devপ্রয়োজনীয় হতে পারে।
  • এই এসও পোস্টটি ব্যাখ্যা করে যে মেক কমান্ডে যুক্তিটির altinstallবিপরীতে কেন কেউ এটি ব্যবহার করতে পারে ।install

পাশাপাশি আমি অনুমান করি যে পছন্দটি হয় সিপাইথন কোডবেসের মাধ্যমে পড়ার জন্য #includeযে নির্দেশনাগুলি পূরণ করা প্রয়োজন তা হ'ল, তবে আমি সাধারণত যা করি তা হল প্যাকেজটি ইনস্টল করার চেষ্টা করা এবং কেবল প্রয়োজনীয় প্যাকেজগুলি ইনস্টল করে আউটপুটটি পড়া অবধি পড়া চালিয়ে যাওয়া সফল।

ইঞ্জিনিয়ার, পরিচালক এবং প্রোগ্রামার যার গল্পটি একটি পাহাড়ের উপর দিয়ে যায় তার গল্পের কথা মনে করিয়ে দেয় ।


3
ফ্যান্টাস্টিক। এখন, আপনি কি আমাকে বলতে পারবেন যে আপনি উপরের তালিকাটি কীভাবে পেয়েছেন? বিচার এবং ত্রুটি দ্বারা? :
-ও

4
সত্যিই, @ ভেকি আমি ত্রুটিটির জন্য একটি ওয়েব অনুসন্ধান করেছিলাম, "ImportError: '_ctypes' নামক কোনও মডিউল" এবং প্রায় খনন করা হয়নি, সম্ভবত এটি কাজ করার আগে কয়েকটি জিনিস চেষ্টা করেছিল। আমার এপিটি, পাইথন,
মেকিং

এটি এর python3-devপরিবর্তে হওয়া উচিত python-devpython-devজন্য মনে হয় python2
টিমো

আপনি কেন একটি উত্স কোড রেপো ক্লোন করবেন এবং তারপরে ব্যবহার করবেন sudo apt-get? এটি কেবল কোনও অর্থবোধ করে না। sudo apt-getইতিমধ্যে সংকলিত কোড ডাউনলোড করা পরিচালনা করে, সুতরাং আপনি কোডটি ডাউনলোড করে কেন তা ব্যবহার করবেন না?
রায়ান 23

1
@ মাইকিএলএল আমি বুঝতে পেরেছি যে সমস্ত sudoবিবৃতি আপনার ডাউনলোড করা উত্স কোডটি তৈরি করতে প্রি-আবশ্যক ইনস্টল করছে। ./configureএবং makeকাপড় সেগুলো ইনস্টল করার প্রয়োজন।
রায়ান

28

আপনি যদি পাইয়ানভ ব্যবহার করেন এবং ডেবিয়ান / রাস্পবিয়ান / উবুন্টুতে "_ctypes" নামে কোনও মডিউল নেই (যেমন আমি আছি) ত্রুটি পান তবে আপনাকে এই আদেশগুলি চালনা করতে হবে:

sudo apt-get install libffi-dev
pyenv uninstall 3.7.6
pyenv install 3.7.6

আপনার পাইথনের সংস্করণটি 3.7.6 এর পরিবর্তে রাখুন


স্ট্যাক ওভারফ্লোতে আপনাকে স্বাগতম। আপনি আরও তথ্য প্রদান করতে পারেন? তথ্যসূত্র ইত্যাদি এবং একটি চেহারা আছে stackoverflow.com/help/how-to-answer
Nodejs-Nerd

উত্তরের জন্য ধন্যবাদ, সর্বাধিক ভোটদাতাদের কাছে আমার সম্ভবত প্রয়োজনীয় পূর্ণাঙ্গ তালিকা ছিল তবে এটি আমাকে pyenvজিনিসগুলি পুনরায় কাজ করতে পুনরায় ইনস্টল করার বিষয়টি মনে করিয়ে দিয়েছে । উত্স কোডটি ধরা এবং makeনিশ্চিতভাবে সমস্ত স্টাফ করার চেয়ে পাইয়ানভ ব্যবহার করা সহজ উপায় ।
ড্রাগন 788

উবুন্টুতে এটি আমার জন্য কাজ করেছিল। সহজ এবং কার্যকর।
ফিল

ধন্যবাদ, এটি সহায়ক ছিল। পাইয়ানভের পূর্বশর্তের সম্পূর্ণ তালিকার জন্য github.com/pyenv/pyenv/wiki/Common-build-problems#prerequisites
মুচা

আপনাকে প্রথমে পাইথন আনইনস্টল করার দরকার নেই। এটি আবার ইনস্টল করা পাইথন বাইনারি পুনরায় সংকলন করবে এবং এটিই প্রয়োজন।
রুশআই

22

CentOS বা যে কোনও রেডহ্যাট লিনাক্স মেশিনে পাইথন ৩.7 ইনস্টল করার বিশদ পদক্ষেপ:

  1. পাইথনটি https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tar.xz থেকে ডাউনলোড করুন
  2. নতুন ফোল্ডারে সামগ্রীটি বের করুন
  3. একই ডিরেক্টরিতে টার্মিনাল খুলুন
  4. কোড ধাপে ধাপে ধাপে:
sudo yum -y install gcc gcc-c++ 
sudo yum -y install zlib zlib-devel
sudo yum -y install libffi-devel 
./configure
make
make install

14

ভেবেছিলাম আমি সেন্টো ইনস্টল যুক্ত করব:

sudo yum -y install gcc gcc-c++ 
sudo yum -y install zlib zlib-devel
sudo yum -y install libffi-devel 

অজগর সংস্করণ পরীক্ষা করুন:

python3 -V

ভার্চুয়ালেনভ তৈরি করুন:

virtualenv -p python3 venv


2
এটি নিম্ন মানের হিসাবে চিহ্নিত করা হয়েছিল এবং আমি এটি পর্যালোচনা সারিতে দেখছি। এটি সত্যিই একা উত্তর হিসাবে কাজ করে না। আমি মুছে ফেলার প্রস্তাব দিচ্ছি, তবে সম্ভবত আপনি এটিকে প্রসারিত করে উন্নত করতে পারেন?
dbliss

11

আমি পরের কমান্ড সহ উবুন্টু 18.04পাইথন ৩. 3..৩ ইনস্টল করার চেষ্টা করেছি: আমি এই ত্রুটিটি ছুঁড়েছি । চলার পরে ইনস্টলেশন সফল হয়েছে ( এখানে প্রস্তাবিত হিসাবে )। বিষয়টি সেখানেই সমাধান করা হয়েছিল$ pyenv install 3.7.3$ sudo apt-get update && sudo apt-get install libffi-dev


6

সমাধানের কোনওটিই কাজ করেনি। আপনাকে আবার আপনার অজগরটি আবার রচনা করতে হবে; সমস্ত প্রয়োজনীয় প্যাকেজ সম্পূর্ণরূপে ইনস্টল করা হয়েছিল।

এটি অনুসরণ করুন:

  1. প্রয়োজনীয় প্যাকেজ ইনস্টল করুন
  2. চালান ./configure --enable-optimizations

https://gist.github.com/jerblack/798718c1910ccdd4ede92481229043be


2
দুর্দান্ত উত্তর। প্রত্যেকে উল্লেখ করেছেন যে আপনার লিবিফি-ডেভেল দরকার এবং এটি এর সমাধান করবে, সমস্যাটি হ'ল আপনাকে অজগরটি পুনরায় সংকলন করতে হবে। আমি লিফফি ছেড়ে দিলাম।
আলেকসান্দার ফুলার

2

পড়ুন এই থ্রেড , libffi এর কাস্টমাইজড ইনস্টলেশনের জন্য কঠিন Python3.7 libffi লাইব্রেরি অবস্থান খুঁজতে জন্য। একটি বিকল্প পদ্ধতি হ'ল CONFIGURE_LDFLAGSমেকফাইলে পরিবর্তনশীল সেট করা , উদাহরণস্বরূপ CONFIGURE_LDFLAGS="-L/path/to/libffi-3.2.1/lib64"


লিঙ্কটি নষ্ট হয়ে গেছে। আপনি এখানে প্রদর্শিত হিসাবে আমি মেকফাইলে পরিবর্তন করার চেষ্টা করেছি কিন্তু এটি কার্যকর হয়নি। _ctypes এখনও বিল্ডিং হয় না।
ব্যবহারকারী5915738

2

আমার সমাধান: অ্যাপটি-গেটের সাথে লিবিফি-ডিভ ইনস্টল করা কোনও লাভ হয়নি। তবে এটি সহায়তা করেছে: উত্স থেকে লিবিফি ইনস্টল করা এবং উত্স থেকে পাইথন ৩.৮ ইনস্টল করা।

আমার কনফিগারেশন: উবুন্টু 16.04 এলটিএস পাইথন 3.8.2

ধাপে ধাপে:

ভিজ্যুয়াল স্টুডিও কোড থেকে ডিবাগারটি শুরু করার সময় এবং চলমান অবস্থায় ত্রুটি বার্তাটি "ModuleNotFoundError: '_ctypes' নামক কোনও মডিউল পাইনি python3 -c "import sklearn; sklearn.show_versions()"

  • https://github.com/libffi/libffi/releases থেকে libffi v3.3 ডাউনলোড করুন
  • libtool ইনস্টল করুন: sudo apt-get install libtool লিডফি থেকে README.md ফাইলটিতে উল্লেখ করা হয়েছে যে অটোকনফ এবং অটোমেকও প্রয়োজনীয়। এগুলি আমার সিস্টেমে ইতিমধ্যে ইনস্টল করা আছে।
  • দস্তাবেজ ছাড়াই লিবিফি কনফিগার করুন:

./configure --disable-docs

make check

sudo make install

এর পরে আমার অজগর ইনস্টলেশন _ctypes খুঁজে পেতে পারে।


2

এটি ডেবিয়ান সম্পর্কে আমার জন্য একই ত্রুটিটি সমাধান করেছে :

sudo apt-get install libffi-dev

এবং আবার সংকলন

তথ্যসূত্র: ইস্যু 31652


0

আপনি যদি মিনিকোন্ডা ব্যবহার করতে আপত্তি করেন না তবে প্রয়োজনীয় বাহ্যিক লাইব্রেরি এবং _ctypes ডিফল্টরূপে ইনস্টল করা হবে। এটি আরও স্থান নেয় এবং পাইথনের একটি মাঝারি ধরণের পুরানো সংস্করণ ব্যবহার করা প্রয়োজন (উদাহরণস্বরূপ এই লেখার পরিবর্তে 3.8.2 এর পরিবর্তে 3.7.6)।


0

আপনাকে প্যাকেজ পরিচালক থেকে হারিয়ে যাওয়া পিপিপি 3 (পাইথন 3) মডিউলগুলি লোড করতে হবে। আপনার যদি উবুন্টু থাকে তবে আমি সুপারিশ করছি Synaptic Package Manager:

sudo apt-get install synaptic

সেখানে আপনি কেবল অনুপস্থিত মডিউলগুলি অনুসন্ধান করতে পারেন। ctyype অনুসন্ধান করুন এবং সমস্ত প্যাকেজ ইনস্টল করুন। তারপরে আপনার পাইথন দিরে যান এবং করবেন

./configure
make install.

এটা আপনার সমস্যা সমাধান করবে.


-1

আপনি যদি এখানে কিছু করেন তবে আপনার কথা কেউ শুনতে পাবে না কারণ "আপনি এটি ভুল উপায়ে করছেন", তবে আপনাকে খুব ভুল কারণের কারণে এটি "ভুল উপায়ে" করতে হবে (উদাহরণস্বরূপ, আমার ক্ষেত্রে এটি দ্রুত অনর্থক হয়ে যায়) ডিভস টিমের অতিরিক্ত ওজনের মা সম্পর্কে কারও সম্পর্কে কথাগুলি), আপনার প্রথমে এটি করা দরকার:

লিবিফি পান এবং এটি আপনার ব্যবহারকারীর ইনস্টল করার জায়গায় সাধারণভাবে ইনস্টল করুন।

git clone https://github.com/libffi/libffi.git
cd libffi
./configure --prefix=path/to/your/install/root
make
make install

তারপরে আপনার পাইথন 3 উত্সটিতে ফিরে যান এবং পাইথন উত্স ডিরেক্টরিটির শীর্ষ স্তরের সেটআপ.পিতে কোডের এই অংশটি সন্ধান করুন

        ffi_inc = [sysconfig.get_config_var("LIBFFI_INCLUDEDIR")]
        if not ffi_inc or ffi_inc[0] == '':
            ffi_inc = find_file('ffi.h', [], inc_dirs)
        if ffi_inc is not None:
            ffi_h = ffi_inc[0] + '/ffi.h'
            if not os.path.exists(ffi_h):
                ffi_inc = None
                print('Header file {} does not exist'.format(ffi_h))
        ffi_lib = None
        if ffi_inc is not None:
            for lib_name in ('ffi', 'ffi_pic'):
                if (self.compiler.find_library_file(lib_dirs, lib_name)):
                    ffi_lib = lib_name
                    break

        ffi_lib="ffi"  # --- AND INSERT THIS LINE HERE THAT DOES NOT APPEAR ---
        if ffi_inc and ffi_lib:
            ext.include_dirs.extend(ffi_inc)
            ext.libraries.append(ffi_lib)
            self.use_system_libffi = True

এবং আমি মন্তব্য সহ উপরে চিহ্নিত লাইন যুক্ত করুন। কেন এটি প্রয়োজনীয়, এবং লিনাক্স প্ল্যাটফর্মগুলিতে '--without-system-ffi`- কে সম্মান করার জন্য কনফিগার করার উপায় নেই কেন, সম্ভবত আমি পরবর্তী কয়েক ঘন্টার মধ্যে এটি "অসমর্থিত" কেন খুঁজে বের করতে পারি তবে সবকিছুই রয়েছে তখন থেকেই কাজ করেছে। অন্যথায়, শুভকামনা ... ওয়াইএমএমভি।

এটি কী করে: কেবল যুক্তিকে ওভাররাইড করে এবং কম্পাইলার লিঙ্কিং কমান্ডকে "-lffi" যুক্ত করতে দেয় যা এটির সত্যই প্রয়োজন। আপনি গ্রন্থাগার থাকে তাহলে ব্যবহারকারী ইনস্টল রয়েছে, এটি সম্ভবত জরিমানা যতদিন আপনার যেমন হেডার সনাক্ত করা হয় PKG_CONFIG_PATHঅন্তর্ভুক্ত path/to/your/install/root/lib/pkgconfig

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.