python setup.py install
ผมได้ติดตั้งแพคเกจหลามกับ
ฉันจะถอนการติดตั้งได้อย่างไร
It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.
จึงยังคงเป็นปัญหาอยู่
python setup.py install
ผมได้ติดตั้งแพคเกจหลามกับ
ฉันจะถอนการติดตั้งได้อย่างไร
It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.
จึงยังคงเป็นปัญหาอยู่
คำตอบ:
หมายเหตุ: หลีกเลี่ยงการใช้python setup.py install
งานpip install .
คุณต้องลบไฟล์ทั้งหมดด้วยตนเองและยกเลิกสิ่งอื่น ๆ ที่การติดตั้งทำได้ด้วยตนเอง
หากคุณไม่ทราบรายชื่อไฟล์ทั้งหมดคุณสามารถติดตั้งใหม่ด้วย--record
ตัวเลือกและดูรายการที่ผลิต
ในการบันทึกรายการไฟล์ที่ติดตั้งคุณสามารถใช้:
python setup.py install --record files.txt
เมื่อคุณต้องการถอนการติดตั้งคุณสามารถใช้ xargs เพื่อทำการลบ:
xargs rm -rf < files.txt
หรือถ้าคุณใช้ Windows ให้ใช้ Powershell:
Get-Content files.txt | ForEach-Object {Remove-Item $_ -Recurse -Force}
แล้วลบยังไดเรกทอรีที่มีเช่นบน/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/my_module-0.1.egg/
macOS
ไม่มีไฟล์ แต่ Python จะยังคงนำเข้าโมดูลว่าง:
>>> import my_module
>>> my_module.__file__
None
เมื่อลบแล้ว Python จะแสดง:
>>> import my_module
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'my_module'
cat files.txt | xargs sudo rm -rf
สำหรับฉันแล้วงานส่วนใหญ่ดังต่อไปนี้:
ติดตั้ง pip แล้วเช่น:
$ easy_install pip
ตรวจสอบแพคเกจที่คุณติดตั้งตั้งชื่อจากมุมมอง pip อย่างไร:
$ pip freeze
นี่จะแสดงรายชื่อของแพ็คเกจทั้งหมดที่คุณติดตั้ง (และตรวจพบโดย pip) #egg=
ชื่อนี้สามารถบางครั้งนานแล้วใช้เพียงแค่ชื่อของแพคเกจที่มีการแสดงที่และหลัง นอกจากนี้คุณยังสามารถในกรณีส่วนใหญ่ไม่สนใจส่วนรุ่น (สิ่งต่อไปนี้==
หรือ-
)
จากนั้นถอนการติดตั้งแพคเกจ:
$ pip uninstall package.name.you.have.found
ถ้ามันขอให้ยืนยันเกี่ยวกับการลบแพคเกจแล้วคุณจะโชคดีและมันจะถูกลบออก
pip จะตรวจสอบแพ็คเกจทั้งหมดที่ติดตั้งโดย pip นอกจากนี้ยังจะตรวจพบแพ็คเกจส่วนใหญ่ที่ติดตั้งผ่าน easy_install หรือ setup.py แต่ในบางกรณีอาจเกิดความล้มเหลว
นี่คือตัวอย่างจริงจากการทดสอบในพื้นที่ของฉันพร้อมชื่อแพ็คเกจttr.rdstmc
บน MS Windows
$ pip freeze |grep ttr
ttr.aws.s3==0.1.1dev
ttr.aws.utils.s3==0.3.0
ttr.utcutils==0.1.1dev
$ python setup.py develop
.....
.....
Finished processing dependencies for ttr.rdstmc==0.0.1dev
$ pip freeze |grep ttr
ttr.aws.s3==0.1.1dev
ttr.aws.utils.s3==0.3.0
-e hg+https://vlcinsky@bitbucket.org/vlcinsky/ttr.rdstmc@d61a9922920c508862602f7f39e496f7b99315f0#egg=ttr.rdstmc-dev
ttr.utcutils==0.1.1dev
$ pip uninstall ttr.rdstmc
Uninstalling ttr.rdstmc:
c:\python27\lib\site-packages\ttr.rdstmc.egg-link
Proceed (y/n)? y
Successfully uninstalled ttr.rdstmc
$ pip freeze |grep ttr
ttr.aws.s3==0.1.1dev
ttr.aws.utils.s3==0.3.0
ttr.utcutils==0.1.1dev
ทุกสิ่งที่เขียนข้างต้นยังคงใช้อยู่มีการแก้ไขเล็กน้อยในขณะนี้
หลามเวอร์ชันล่าสุดมาพร้อมกับแพ็คเกจที่ensurepip
อนุญาตให้ติดตั้ง pip ได้แม้ขณะออฟไลน์:
$ python -m surepip - อัปเกรด
ในบางระบบ (เช่น Debian Jessie) ไม่สามารถใช้งานได้ (เพื่อป้องกันการติดตั้งหลามระบบ)
grep
หรือfind
ตัวอย่างข้างต้นสมมติว่าคุณgrep
ติดตั้งแล้ว ฉันมี (ในขณะนั้นฉันมี MS Windows บนเครื่องของฉัน) ติดตั้งชุดของโปรแกรมอรรถประโยชน์ linux (รวมถึง grep) หรือมิfind
ฉะนั้นให้ใช้ MS Windows แบบเนทีฟหรือไม่สนใจการกรองนั้นและค้นหาชื่อในรายการแพคเกจหลามที่ตรวจพบอีกต่อไป
distutils
, distribute
ฯลฯ ... )
setuptools
ฉันใช้ คุณสามารถตรวจสอบbitbucket.org/vlcinsky/ttr.aws.utils.s3 (ซึ่งไม่สมบูรณ์) อย่างไรก็ตามฉันค่อนข้างไม่พึงพอใจกับการใช้แพ็คเกจ namespace บางครั้งการนำเข้าอาจเสียหายโดยไม่มีเหตุผลที่ชัดเจน แต่มันเป็นเรื่องอื่น
setuptools
distribute
บทเรียนอื่น: เมื่อติดตั้งแพคเกจของฉันเองจาก pypi และวางแผนที่จะพัฒนาอีกอันหนึ่งโดยใช้พื้นที่ร่วมกันในเนมสเปซเดียวกันอย่าใช้ $ pip install <the package>
ใช้$ easy_install <the package>
มิฉะนั้นคุณจะพบข้อขัดแย้งเมื่อนำเข้าแพ็คเกจพัฒนา
easy_install --user --prefix=$HOME pip
นี่คือสิ่งที่ผมทำ แล้วฉันจะเพิ่มต่อไปนี้ในเส้นทางของฉัน: ln -s /home/tflutre/.local/bin/pip ~/bin
, และln -s /home/tflutre/.local/bin/pip2.7 ~/bin
ln -s /home/tflutre/.local/bin/pip2 ~/bin
pip uninstall module
หรือpython -m pip uninstall module
ควรใช้งานได้ ควรเป็น cross-platform เช่นเดียวกับ Python
# 1 คำตอบมีปัญหา:
xargs
คำสั่งจะล้มเหลวและลบไฟล์ / ไดเรกทอรีใด ๆ ที่ตรงกับคำแต่ละคำ-r
ในrm -rf
เป็นที่ไม่จำเป็นและที่เลวร้ายที่สุดสามารถลบสิ่งที่คุณไม่ต้องการที่จะแทนสำหรับ unix-like:
sudo python setup.py install --record files.txt
# inspect files.txt to make sure it looks ok. Then:
tr '\n' '\0' < files.txt | xargs -0 sudo rm -f --
และสำหรับ windows:
python setup.py bdist_wininst
dist/foo-1.0.win32.exe
นอกจากนี้ยังมีปัญหาที่แก้ไม่ได้ด้วยการถอนการsetup.py
ติดตั้งการติดตั้งซึ่งจะไม่รบกวนคุณในกรณีทั่วไป สำหรับคำตอบที่สมบูรณ์ยิ่งขึ้นให้ดูหน้าวิกินี้:
OIFS=$IFS; IFS=$'\n'; FILES=( $( cat files.txt ) ); IFS=$OIFS; sudo rm -rf "${FILES[@]}"
printf
สตริงรูปแบบของจะล้มเหลวหากสตริงนั้นมีเช่น%
หรือ\
ตัวอักษร ระบุสตริงรูปแบบเสมอ: printf '%s\0' "$line"
(หลีกเลี่ยงเสียงสะท้อน) แม้ว่าคุณจะสามารถหลีกเลี่ยงการวนซ้ำได้อีกโดยใช้เพียงtr '\n' '\0' < files.txt | xargs -0 rm -f
ก่อนบันทึกไฟล์ที่คุณติดตั้ง คุณสามารถทำซ้ำคำสั่งนี้แม้ว่าคุณจะเคยเรียกใช้setup.py install
:
python setup.py install --record files.txt
เมื่อคุณต้องการถอนการติดตั้งคุณสามารถ:
sudo rm $(cat files.txt)
สิ่งนี้ทำงานได้เนื่องจากคำสั่ง rm ใช้รายการไฟล์ที่แยกต่างหากเพื่อลบและบันทึกการติดตั้งของคุณเป็นเพียงรายการดังกล่าว
ตอนนี้หลามให้คุณเลือกที่จะติดตั้งpip
ระหว่างการติดตั้ง (ฉันอยู่บน Windows และอย่างน้อยก็หลามทำเพื่อ Windows!) พิจารณาว่าคุณเลือกที่จะติดตั้งpip
ระหว่างการติดตั้ง python (คุณไม่จำเป็นต้องเลือกเพราะมันเป็นค่าเริ่มต้น) pip
ติดตั้งแล้วสำหรับคุณ จากนั้นพิมพ์pip
command prompt คุณจะเห็นความช่วยเหลือเกิดขึ้น คุณสามารถค้นหาคำแนะนำการใช้งานที่จำเป็นได้ที่นั่น เช่นpip list
แสดงรายการแพ็คเกจที่ติดตั้ง คุณสามารถใช้ได้
pip uninstall package_name
ถอนการติดตั้งแพ็คเกจใด ๆ ที่คุณไม่ต้องการอีกต่อไป อ่านรายละเอียดเพิ่มเติมได้ที่นี่ (เอกสาร pip)
วิธีขี้เกียจ: เพียงถอนการติดตั้งจากเมนูการติดตั้ง Windows (หากคุณใช้ Windows) หรือจากคำสั่ง rpm ให้คุณติดตั้งใหม่อีกครั้งหลังจากสร้างแพ็คเกจการแจกจ่าย
ตัวอย่างเช่น,
python setup.py bdist_wininst
dist/foo-1.0.win32.exe
("foo" เป็นตัวอย่างของหลักสูตร)
ไปที่ไดเรกทอรีแพคเกจหลามของคุณและลบไฟล์. egg ของคุณเช่น: ใน python 2.5 (Ubuntu): /usr/lib/python2.5/site-packages/
ใน python 2.6 (Ubuntu): /usr/local/lib/python2.6/dist-packages/
ไม่ตอบคำถาม แต่สิ่งที่ช่วยฉันทุกวัน:
ติดตั้งแพ็คเกจของคุณด้วย
pip install .
$HOME/.local
ซึ่งจะทำให้แพคเกจใน ถอนการติดตั้งด้วย
pip uninstall <package_name>
pip unistall .
ใช้งานไม่ได้สำหรับฉัน แต่pip uninstall <package_name>
ไม่ได้ขอบคุณ!
อาจคุณสามารถทำสิ่งนี้แทน: -
1) รับรุ่นหลาม -
[linux machine]# python
Python 2.4.3 (#1, Jun 18 2012, 14:38:55)
-> คำสั่งด้านบนให้เวอร์ชั่นหลามปัจจุบันซึ่งเป็น2.4.3
2) รับไดเรกทอรีการติดตั้งของหลาม -
[linux machine]# whereis python
python: /usr/bin/python /usr/bin/python2.4 /usr/lib/python2.4 /usr/local/bin/python2.5 /usr/include/python2.4 /usr/share/man/man1/python.1.gz
-> จากคำสั่งด้านบนคุณจะได้รับไดเรกทอรีการติดตั้งซึ่งเป็น - /usr/lib/python2.4/site-packages
3) จากตรงนี้คุณสามารถลบแพ็คเกจและไฟล์ python egg ได้
[linux machine]# cd /usr/lib/python2.4/site-packages
[linux machine]# rm -rf paramiko-1.12.0-py2.4.egg paramiko-1.7.7.1-py2.4.egg paramiko-1.9.0-py2.4.egg
สิ่งนี้ใช้ได้สำหรับฉัน .. และฉันก็สามารถถอนการติดตั้งแพ็คเกจซึ่งทำให้ฉันหนักใจ :)
ฉันคิดว่าคุณสามารถเปิด setup.py ค้นหาชื่อแพ็คเกจแล้วขอให้ pip ถอนการติดตั้งได้
สมมติว่าชื่อนั้นมีอยู่ในตัวแปร 'METADATA':
pip uninstall $(python -c "from setup import METADATA; print METADATA['name']")
เมื่อพูดถึงมาร์ตินการบันทึกผลลัพธ์การติดตั้งและการเขียนสคริปต์ทุบตีเล็ก ๆ น้อย ๆ นั้นก็เป็นการหลอกลวง นี่คือสิ่งที่ฉันทำ ...
for i in $(less install.record);
sudo rm $i;
done;
และโอมเพี้ยง ถอนการติดตั้ง
sudo xargs rm -v < install.record
ง่ายมากที่จะเขียนนี้เป็น
หากคุณยังคงมีไฟล์ที่ควรจะลบหลังจากติดตั้งแพคเกจใหม่อีกครั้งตรวจสอบให้แน่ใจว่าโฟลเดอร์build
นั้นถูกลบเช่นกัน ดังนั้นสมมติว่าpkg
เป็นแพ็คเกจที่คุณต้องการลบ:
rm -r $(python3 -c "import pkg; print(pkg.__path__[0] + '*' )")
rm -rf build
Obove ออกกำลังกายสำหรับ python3 และลบแพ็คเกจและไฟล์ * .egg-info
ที่{virtualenv}/lib/python2.7/site-packages/
(ถ้าไม่ได้ใช้ virtualenv แล้ว{system_dir}/lib/python2.7/dist-packages/
)
distribute-0.6.34-py2.7.egg
)easy-install.pth
ให้ลบบรรทัดที่เกี่ยวข้อง (ควรเป็นพา ธ ไปยังไดเรกทอรีต้นทางหรือไฟล์ไข่)ฉันเคยเรียกใช้ "ติดตั้ง python setup.py" ในบางครั้งในอดีตโดยไม่ได้ตั้งใจในสภาพแวดล้อมทั่วโลกของฉันและมีปัญหาในการถอนการติดตั้ง โซลูชันเหล่านี้ไม่ได้ช่วย "pip uninstall" ไม่ทำงานกับ "ไม่สามารถถอนการติดตั้ง 'splunk-appinspect' ไม่พบไฟล์ที่จะถอนการติดตั้ง" "sudo pip uninstall" ไม่ทำงาน "ไม่สามารถถอนการติดตั้งข้อกำหนด splunk-appinspect ไม่ได้ติดตั้ง" ฉันลองถอนการติดตั้ง pip ลบแคช pip ค้นหาฮาร์ดไดรฟ์ของฉันเพื่อดูแพ็คเกจ ฯลฯ ...
"การแสดง pip" ในที่สุดก็นำฉันไปสู่การแก้ปัญหา "สถานที่:" ชี้ไปที่ไดเรกทอรีและเปลี่ยนชื่อไดเรกทอรีที่ทำให้แพคเกจจะถูกลบออกจากรายการของ pip ฉันเปลี่ยนชื่อไดเรกทอรีกลับและมันไม่ปรากฏขึ้นอีกครั้งในรายการของ pip และตอนนี้ฉันสามารถติดตั้งแพ็คเกจของฉันใหม่ใน virtualenv
ฉันทำงานpython setup.py install
ครั้งเดียวใน PyCharm ของฉันมันจะติดตั้งแพ็คเกจทั้งหมดในสภาพแวดล้อมฐานของฉัน ต่อมาเมื่อฉันต้องการลบแพ็คเกจเหล่านี้ทั้งหมดpip uninstall
ไม่ทำงาน ฉันต้องลบมันออกจาก /anaconda3/lib/python3.7/site-packages ด้วยตนเอง :(
ดังนั้นฉันไม่เห็นสาเหตุที่พวกเขาใช้ setup.py แทนการเขียนไฟล์ requirements.txt ไฟล์ความต้องการสามารถใช้ในการติดตั้งแพ็คเกจในสภาพแวดล้อมเสมือนจริงและจะไม่ยุ่งกับแพ็คเกจระบบงูใหญ่
อาจเป็นการดีกว่าที่จะลบไฟล์ที่เกี่ยวข้องโดยใช้คำสั่ง bash เพื่ออ่านเช่นต่อไปนี้:
sudo python setup.py install --record files.txt
sudo bash -c "cat files.txt | xargs rm -rf"
pip uninstall <your_package>
ใช้ ดูstackoverflow.com/questions/1231688/...