Я недавно учил себя Python, и мне попался пример, в котором str.endswith принял кортеж в качестве первого аргумента, который 2.4 не поддерживает. Я решил попробовать установить более новую версию Python на мою машину, чтобы быть в курсе. Машина CentOs5.
Как мой пользователь на машине (не root), я извлек пакет отсюда: http://www.python.org/ftp/python/2.6.7/, распаковал его, сделал ./configure --prefix = / home / myusername / python / compiler / Python-2.6. 7-установленный, затем запустил make, make test (все в порядке) и, наконец, сделал altinstall для хорошей меры (я знаю, что делать altinstall не нужно, так как я указал префикс, но на самом деле не хочу нарушать обычный python на эта машина). Когда это сначала не сработало, я попробовал make altinstall от имени root, но это не имело значения.
Когда я пытаюсь запустить скрипт для бинарного файла, я просто получаю кучу слов:
./compiler/Python-2.6.7/Lib/test/test_re.pyc : onXtd}|iti|iddddgdS(Nsu" [\u002E\u3002\uFF0E\uFF61]"sa.b.cR$RHRX(R0RÑRÚR RRY(R R7((s@/home/yspendiff/python/compiler/Python-2.6.7/Lib/test/test_re.pyttest_bug_931848as
Cstidd}|i|iid|it|itidd}|i|i id|i|i ddS(Ns\ssa bii(ii(ii(
StopIterationRºRR(R RRÓR tnextRR4t
Rº((s@/home/yspendiff/python/compiler/Python- 2.6.7/Lib/test/test_re.pyttest_bug_581080js
cCsatidd}|i|iid|i|iid|it|idS(Ns.*tasdfii(ii(ii(RRÓR RÝRR4RÞ(R
и, возможно, более уместно много таких строк:
./compiler/Python-2.6.7/Lib/test/test_unicode.py : self.assert_(u'asdf' not in '')
./compiler/Python-2.6.7/Lib/test/test_unicode.py : self.assert_('asdf' not in u'')
./compiler/Python-2.6.7/Lib/test/test_unicode.py : self.assert_(u'asdf' not in u'')
./compiler/Python-2.6.7/Lib/test/test_re.py : iter = re.finditer(r".*", "asdf")
./compiler/Python-2.6.7/Lib/test/string_tests.py : self.checkequal(True, 'asdf', '__contains__', 'asdf')
./compiler/Python-2.6.7-installed/lib/python2.6/test/test_unittest.py : loader.loadTestsFromNames(['sdasfasfasdf'])
./compiler/Python-2.6.7-installed/lib/python2.6/test/test_unittest.py : self.assertEqual(str(e), "No module named sdasfasfasdf")
Это всего лишь несколько случайных строк из сотен. Я не возился ни с одним из параметров по умолчанию, не выбрал ли я забавную версию или не указал несколько забавных параметров компиляции. Как мне его отключить, чтобы я мог спокойно писать код!
Код ниже, если кому-то интересно. Я просто называю это с помощью ./Findword.py asdf:
#!/home/myusername/python/compiler/Python-2.6.7-installed/bin/python2.6
### FindWord.py
import os # for curdir() #(A)
import os.path # for join(), isfile() #(B)
import sys # for argv[], exit() #(C)
if len( sys.argv ) != 2: #(D)
print "need a word or a single-quoted phrase to search for" #(E)
sys.exit(1) #(F)
def searchInFile( pattern, dirname, filenames ): #(G)
for name in filenames: #(H)
name = os.path.join( dirname, name ) #(I)
if os.path.isfile( name ) and not name.endswith(('.pdf','.pl')): #(J)
FH = open( name, 'r' ) #(K)
for eachline in FH: #(L)
if ( eachline.find( pattern ) != -1 ): #(M)
print name, ': ', eachline #(N)
os.path.walk( os.curdir, searchInFile, sys.argv[1] ) #(O)