পাইথন 3 প্রকল্প __pycache__ ফোল্ডার এবং .pyc ফাইলগুলি সরান


166

পাইথন 3 প্রকল্প থেকে সমস্ত __pycache__ ফোল্ডার এবং .pyc/.pyoফাইলগুলি সাফ করার সর্বোত্তম উপায় কী । আমি একাধিক ব্যবহারকারীকে pycleanস্ক্রিপ্টটি দেবিয়ান বান্ডিল করার পরামর্শ দিয়েছি , তবে এটি ফোল্ডারগুলি সরিয়ে দেয় না। আমার ডিভিএস-তে ফাইলগুলি চাপ দেওয়ার আগে আমি প্রকল্পটি পরিষ্কার করার একটি সহজ উপায় চাই।

উত্তর:


241

আপনি পরবর্তী কমান্ডের সাহায্যে এটি ম্যানুয়ালি করতে পারেন:

find . | grep -E "(__pycache__|\.pyc|\.pyo$)" | xargs rm -rf

এটি বর্তমান ডিরেক্টরিতে পুনরাবৃত্তভাবে সমস্ত * .pyc ফাইল এবং __pycache__ ডিরেক্টরি মুছে ফেলবে ।


8
কমান্ডটি নোংরা। এটি মুছে ফেলবে *__pycache__, *.pyc*এবং এটি ফাইল এবং ডিরেক্টরিগুলির মধ্যে পার্থক্য করে না। উত্পন্ন বেশিরভাগ rmকমান্ডও অতিরিক্ত অতিরিক্ত হবে।
ivan_pozdeev

12
এটা ঠিক ভুল। এটি আপনি কীভাবে ব্যবহার করেন findনা grepএবং তাও নয় rmএবং এটি যে কোনও বর্তমান ভার্চিং ডিরেক্টরিতে থাকতে পারে useful.pycle.jsonবা important_deployment_setting_about__pycache__.txtইত্যাদির জন্য বিপজ্জনক হতে পারে যা আমি সম্পূর্ণ ইউজার বেসের বাইরেও বাতিল করব না। নামে সাদা অংশ সহ একটি ফাইল দ্বারা কীভাবে (বিপজ্জনকভাবে rm -rf) ভাঙ্গা xargsহবে তা উল্লেখ করার দরকার নেই । সুতরাং আমি এটি সম্পাদনা করেছি ...
dlamblin

@ ডোয়ান্ডারসন আমার মনে হয় আপনি আলাদা উত্তর সম্পর্কে কথা বলছেন; বা এসও সম্পাদনা ইতিহাস আর পুরো ইতিহাস EG প্রদর্শন করে না 2017 এ এমন একটি সংস্করণ ছিল যা সেখানে প্রদর্শিত হয়নি?
dlamblin

2
ওএসএক্সে কাজ করে নাgrep: parentheses not balanced
ড্যানিয়েল ডব্লিউ

85

আমি পাইক্লান হিসাবে পাইক্লানকে ভুল টাইপ করলে উত্তরটি আমি নিজেই পেয়েছি:

    No command 'pycclean' found, did you mean:
     Command 'py3clean' from package 'python3-minimal' (main)
     Command 'pyclean' from package 'python-minimal' (main)
    pycclean: command not found

রানিং py3clean .এটি খুব সুন্দরভাবে পরিষ্কার করেছে।


6
পাই 3 ক্যালান @ ভি.গামুলার কমান্ডের চেয়ে বেশি রক্ষণশীল: এটি সেই উত্স ফাইল থেকে উত্পন্ন পিপিসি ফাইলগুলি মুছে না যা থেকে মুছে ফেলা হয়েছে।
জেরুমে

1
মে / 2017 পর্যন্ত, ম্যাকোস / হোমব্রিউতে, আমাকে পাইপ থেকে প্যাকেজ পাইকার্যান্স ব্যবহার করতে হয়েছিল, এবং এটি কার্যকর করার জন্য আদেশটি পাইক্ল্যানার। পাইথন 2।
উইলিয়ান মিতসুদা

3
পাইথন 3-ন্যূনতম কেবলমাত্র ডেবিয়ানে উপলব্ধ রয়েছে (এটি আরএইচইল, সেন্টস, ব্রি, ম্যাকোজে খুঁজে পাওয়া যায় না)
ব্যবহারকারী 12345

1
অদ্ভুতভাবে যথেষ্ট, আমার ইনস্টলড পাই 3 ক্যালান (3.5.5-3) আসলে কিছুই করে না, এই ফাইলগুলির কোনওটিই সাফ করে না এবং কেবল নিঃশব্দে ফিরে আসে (অজগর 3.6.5)।
ম্যাটানস্টার

4
এটি __pycache__ফোল্ডারগুলি, বা .pycফাইলগুলি মুছবে না (ডেবিয়ানের উপর পরীক্ষা করা হয়েছে)
এরিকলাভল্ট

82

ম্যাকোস এবং লিনাক্স

বাসদ এর findMacOS উপর বাস্তবায়ন গনুহ খোঁজ থেকে ভিন্ন - এই উভয় বাসদ এবং গনুহ এটি সঙ্গে সামঞ্জস্যপূর্ণ। ব্যবহার করে -nameএবং এর -oজন্য - গ্লোব্বিং বাস্তবায়ন দিয়ে শুরু করুন বা - আপনার .bashrcফাইলে এই ফাংশনটি রাখুন :

pyclean () {
    find . -type f -name '*.py[co]' -delete -o -type d -name __pycache__ -delete
}

তারপরে cdযে ডিরেক্টরিটিতে আপনি পুনরাবৃত্তভাবে পরিষ্কার করতে চান তা টাইপ করুন এবং টাইপ করুন pyclean

জিএনইউ সন্ধানযোগ্য

এটি একটি জিএনইউ সন্ধান, কেবলমাত্র (যেমন লিনাক্স) সমাধান, তবে আমি মনে করি এটি রেজেক্সের সাথে কিছুটা সুন্দর er

pyclean () {
    find . -regex '^.*\(__pycache__\|\.py[co]\)$' -delete
}

পাইথন 3 ব্যবহার করে যে কোনও প্ল্যাটফর্ম

উইন্ডোজ, সম্ভবত আপনি এমনকি না find। তবে আপনার কাছে সম্ভবত পাইথন 3 রয়েছে যা 3.4 থেকে শুরু করে সুবিধাজনক pathlibমডিউল রয়েছে:

python3 -Bc "import pathlib; [p.unlink() for p in pathlib.Path('.').rglob('*.py[co]')]"
python3 -Bc "import pathlib; [p.rmdir() for p in pathlib.Path('.').rglob('__pycache__')]"

-Bপতাকা পাইথন বলে লিখতে না .pycফাইল। ( PYTHONDONTWRITEBYTECODEপরিবেশের পরিবর্তনশীলও দেখুন ))

উপরের আপত্তিগুলি লুপিংয়ের জন্য উপলব্ধিগুলি তালিকা করে, তবে ব্যবহার করার সময় python -cশৈলী বরং একটি গৌণ উদ্বেগ। বিকল্পভাবে আমরা অপব্যবহার করতে পারি (উদাহরণস্বরূপ) __import__:

python3 -Bc "for p in __import__('pathlib').Path('.').rglob('*.py[co]'): p.unlink()"
python3 -Bc "for p in __import__('pathlib').Path('.').rglob('__pycache__'): p.rmdir()"

একটি উত্তরের সমালোচনা

শীর্ষ উত্তরটি বলত:

find . | grep -E "(__pycache__|\.pyc|\.pyo$)" | xargs rm -rf

এটি কম দক্ষ বলে মনে হচ্ছে কারণ এটি তিনটি প্রক্রিয়া ব্যবহার করে। findএকটি নিয়মিত অভিব্যক্তি গ্রহণ করে, তাই আমাদের পৃথক প্রার্থনার প্রয়োজন নেই grep। একইভাবে এটিরও রয়েছে -delete, সুতরাং আমাদের rmএখানে একটি মন্তব্যের বিপরীতে পৃথক প্রার্থনার প্রয়োজন নেই, এটি নিয়মিত এক্সপ্রেশন ম্যাচের গুণে খালি হয়ে যাওয়ার পরে এটি খালি নয় এমন ডিরেক্টরিগুলি মুছে ফেলবে

থেকে xargsমানুষ পৃষ্ঠা:

find /tmp -depth -name core -type f -delete

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


আপনি অজগর সংস্করণটি সম্ভবত প্রথমে খালি না shutil.rmteeকরে __pycache__ডিরেক্টরিতে ব্যবহার করে এক লাইনে পেয়ে যেতে পারেন ; একটি ওয়ান-লাইনার একটি সহজ ওরফে জন্য ভাল হতে পারে। Pathযদিও আমি এখনই একটি বড় অনুরাগী , তাই আমি মনে করি আমি আমার স্ক্রিপ্টে সেই সংস্করণটি ব্যবহার করব।
নাথান

25

যেহেতু এটি পাইথন 3 প্রকল্প, আপনার কেবল __pycache__ডিরেক্টরিগুলি মুছতে হবে - সমস্ত ফাইল .pyc/ .pyoফাইলগুলি সেগুলির মধ্যে রয়েছে।

find . -type d -name __pycache__ -exec rm -r {} \+

বা এর সহজ ফর্ম,

find . -type d -name __pycache__ -delete

যা কোনও কারণে আমার পক্ষে কাজ করেনি (ফাইলগুলি মুছে ফেলা হয়েছে তবে ডিরেক্টরিগুলি ছিল না), তাই আমি সম্পূর্ণতার জন্য উভয়কেই অন্তর্ভুক্ত করছি।


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


না, সমস্ত .pycফাইল এর অভ্যন্তরে নেই।
মার্টিন থোমা

@ ভি.গামুলা এটির চেয়ে যথেষ্ট নিরাপদ কমান্ড than ১১৪ জন লোকের পক্ষে যথেষ্ট ভাগ্যবান তারা ভুল ম্যাচের স্থায়ীভাবে মুছে ফেলার জন্য তাদের কামড় দেয়নি।
dlamblin

অজগর 3 প্রকল্পে কেবল মার্টিনথোমা?
dlamblin

4
আমি কি Directory not emptyএখানে দ্বিতীয় বৈকল্পিকের সাথে একা পাচ্ছি?
ম্যাটানস্টার

13

এটি আমার অ্যালাম যা পাইথন 2 এবং পাইথন 3 উভয়ই সমস্ত .pyc .pyoফাইল পাশাপাশি __pycache__ডিরেক্টরিগুলি পুনরাবৃত্তভাবে মুছে ফেলে ।

alias pyclean='find . -name "*.py[co]" -o -name __pycache__ -exec rm -rf {} +'

অনেক ধন্যবাদ. এটি আমার পোস্টগুলির জন্য অপ্রয়োজনীয় সমস্ত ফাইল থেকে মুক্তি পেতে সহায়তা করেছিল।
হর্ষ আগরওয়াল

13

পাইথন ক্যাশে ফাইলগুলি আপনার প্রকল্পের ডিরেক্টরি থেকে দূরে রাখার জন্য যদি আপনার স্থায়ী সমাধান প্রয়োজন :

পাইথন ৩.৮ দিয়ে শুরু করে আপনি PYTHONPYCACHEPREFIXপাইথনের জন্য ক্যাশে ডিরেক্টরি নির্ধারণ করতে পরিবেশ পরিবর্তনশীলটি ব্যবহার করতে পারেন ।

পাইথন ডক্স থেকে:

যদি এটি সেট করা থাকে, পাইথন উত্স গাছের মধ্যে পাইচাই ডিরেক্টরিতে পরিবর্তে এই পথে একটি মিরর ডিরেক্টরি ট্রিতে .pyc ফাইলগুলি লিখবে । এটি -X পাইচছে_প্রিফিক্স = PATH বিকল্পটি নির্দিষ্ট করার সমান।

উদাহরণ

আপনি যদি ./profileলিনাক্সে নিম্নলিখিত লাইনটি যুক্ত করেন :

export PYTHONPYCACHEPREFIX="$HOME/.cache/cpython/"

পাইথন __pycache__আপনার প্রকল্প ডিরেক্টরিতে বিরক্তিকর ডিরেক্টরিগুলি তৈরি করবে না , পরিবর্তে এটি সমস্তটির অধীনে রাখবে~/.cache/cpython/


4
মঙ্গল আসছে এই আসছে। Pycache শিবিকা ডিরেক্টরি ভুল ছিল।
সারা জি

7

আমি যে কমান্ডটি ব্যবহার করেছি:

find . -type d -name "__pycache__" -exec rm -r {} +

ব্যাখ্যা করে:

  1. প্রথমে __pycache__বর্তমান ডিরেক্টরিতে সমস্ত ফোল্ডার সন্ধান করে ।

  2. সম্পাদন rm -r {} +উপরে পদে পদে প্রতিটি ফোল্ডারের মুছে ফেলতে ( {} স্থানধারক জন্য বোঝান এবং +কমান্ড শেষ)

সম্পাদিত 1:

আমি লিনাক্স ব্যবহার করছি, কমান্ডটি পুনরায় ব্যবহার করতে আমি ~/.bashrcফাইলটিতে নীচের লাইনটি যুক্ত করেছি

alias rm-pycache='find . -type d -name  "__pycache__" -exec rm -r {} +'

সম্পাদিত 2: আপনি যদি ভিএস কোড ব্যবহার করছেন তবে আপনাকে __pycache__ম্যানুয়ালি অপসারণ করতে হবে না । আপনি settings.jsonফাইল করতে নীচে স্নিপেট যোগ করতে পারেন । এর পরে, ভিএস কোড__pycache__ আপনার জন্য সমস্ত ফোল্ডার গোপন করবে

"files.exclude": {
     "**/__pycache__": true
}

আশা করি এটা সাহায্য করবে !!!


4

পাইচার্ম ব্যবহার করে

পাইথন সংকলিত ফাইলগুলি সরাতে

  1. ইন Project Tool Window, একটি প্রকল্প অথবা ডাইরেক্টরি, যেখানে পাইথন কম্পাইল ফাইল থেকে মুছে ফেলা হবে ডান-ক্লিক করুন।

  2. প্রসঙ্গ মেনুতে, নির্বাচন করুন Clean Python compiled files

.pycনির্বাচিত ডিরেক্টরিতে থাকা ফাইলগুলি নীরবে মুছে ফেলা হয়।


4

প্রকল্প ডিরেক্টরি থেকে নিম্নলিখিত টাইপ করুন:

সমস্ত .pyc ফাইল মুছে ফেলা হচ্ছে

find . -path "*/*.pyc" -delete

সমস্ত .pyo ফাইল মোছা হচ্ছে :

find . -path "*/*.pyo" -delete

সবশেষে, সমস্ত '__pycache__' মুছতে , টাইপ করুন:

find . -path "*/__pycache__" -type d -exec rm -r {} ';'

যদি আপনি অনুমতি অস্বীকারের ত্রুটির মুখোমুখি হন তবে উপরের সমস্ত কমান্ডের সূচনাতে sudo যুক্ত করুন ।


2

অন্যান্য উত্তরগুলির জন্য অনেক ধন্যবাদ, তাদের উপর ভিত্তি করে আমি আমার ডেবিয়ান প্যাকেজটির prermফাইলটির জন্য এটি ব্যবহার করেছি :

#!/bin/sh
set -e

deb_package='package-name'
python_package='package_name'

if which pyclean >/dev/null 2>&1; then
    py3clean -p $deb_package
else
    dpkg -L $deb_package | grep ${python_package}$ | while read file
    do
        find ${file} -type d -name __pycache__ -exec rm -r {} \+
    done
fi

0

শুধু ব্যবহার rm -rf __pycache__করবেন না কেন ? git add -Aআপনার সংগ্রহশালা থেকে এগুলি সরাতে এবং __pycache__/আপনার .gitignore ফাইলটিতে যুক্ত করতে পরে চালান ।


1
তিনি নিজে এটি করছেন না। তিনি এটিকে দেবিয়ান প্যাকেজে ব্যবহৃত স্ক্রিপ্টে যুক্ত করার চেষ্টা করছেন। একটি ডিবিয়ান প্যাকেজটি গিটের সাথে ব্যবহার করা হয় না তবে ডেবিয়ান প্যাকেজ ম্যানেজার বা অ্যাপ্লিকেশন ইনস্টলারের সাথে ব্যবহৃত হয়।
ক্রেগ

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