mysql как-то установился в ~/Downloads и в скрытый ~/.python-eggs, и одновременно в более предсказуемый /Library/Python/2.7/site-packages/. Попробуйте убрать вот эти вот первые папки (может быть, временные). from parent import _mysql. Можно также просто повторно импортировать _mysql, это вернет уже импортированный модуль из sys.modules. В Python у каждого модуля свое пространство имен, модули между собой никак не пересекаются, и это считается feature, а не bug. Импортировать _mysql даже правильнее, если родительский модуль ничего к нему не добавляет — это явно дает понять, что мы имеем дело с общим _mysql, а не с тем, что в родительском модуле называется _mysql. Py_BuildValue возвращает new reference, то есть объект со счетчиком ссылок, установленным в единицу, которым теперь владеет ваш код. Функция же PyList_Append не забирает у вас этот объект, а тоже увеличивает счетчик ссылок еще на единицу. Теперь у полученной строки будет два владельца — список и ваш код. Когда вы удалите список, он честно отнимет свою единичку от счетчика ссылок, но ваша-то там останется, поэтому Питон будет думать, что кто-то где-то эту строку еще использует.PyObject *list, *item; /* static, право, ни к чему */
list = PyList_New(0);
item = Py_BuildValue("s"; "test");
PyList_Append(list, item);
Py_DECREF(item);
return list;
PyObject *list;
list = PyList_New(1); /* оставляем место для элемента */
PyList_SET_ITEM(list, Py_BuildValue("s"; "test"));
return list;
PyList_SET_ITEM, который как раз подходит для заполнения новых списков.) (0-5) is 5 = True :) Почему бы не написать, особенность не самая известная, пусть будет. n[ext] — он выполняет команды, не заходя в вызываемые функции или unt[il] — выполняет команды до тех пор, пока не окажется строчкой ниже (т. е. если в последней строчке цикла сказать until, он промотает весь цикл и остановится на следующей команде. Чтобы поставить условный breakpoint, нужно сказать b[reak] ([file:]lineno | function)[, condition], например, break 42, a = 5. Команда перехода к нужной строке — j[ump]. Вот насчет отлавливания типичной ошибки не скажу — таким не пользуюсь. Но вообще такое вроде есть — например, можно завернуть вызов программы в собственный try/except, отловить ошибку, посмотреть ее текст, и если совпадает — запустить отладчик (вот тут не помню, как из кода его запустить), чтобы посмотреть стек вызовов (w[here]). h[elp]). pdb этот код и на response.read вошел бы в функцию. Насколько я понимаю, это вызывается HTTPConnection.read из httplib, но там несколько вариантов — хорошо бы понять хотя бы в какую ветку идет код. sys, то он может добраться до уже импортированного модуля через sys.modules, не используя явный import. Плюс у каждой питоновской функции есть func_globals, ссылка на словарь модуля, в котором она определена. Со всем содержимым модуля, естественно. Так что если вы передаете безопасную питоновскую функцию из опасного модуля, можно будет получить доступ ко всему модулю, и, соответственно, по цепочке ко всем другим модулям из которых тот что-то импортировал. This is a standard zip file where all the pure source modules will be inserted (using the «zipfile» option, you can also select to put that file in a sub-directory and with a different name)[.]
print my_str.replace(' ', '').split('^')[0] и увидите. @executable_path/libqsqlmysql.dylib :) -headerpad_max_install_names, специально для перебивания, как я понимаю, но вряд ли она была включена.) msvcrt.dll, что еще уменьшит размер дистрибутива. def rmspp(number, attempts=28):
"""
rmspp(n, attempts=28) -> True if n appears to be primary, else False
rmspp: Rabin-Miller Strong Pseudoprime Test
http://mathworld.wolfram.com/Rabin-MillerStrongPseudoprimeTest.html
"""
if number < 2:
return False
if number == 2:
return True
if number % 2 == 0:
return False
# Given an odd integer n, let n = 2**r*s+1, with s odd...
s = number - 1
r = 0
while s % 2 == 0:
r += 1
s /= 2
while attempts:
# ... choose a random integer a with 1 ≤ a ≤ n-1
a = randint(1, number-1)
# Unless a**s % n ≠ 1 ...
if mod_exp(a, s, number) != 1:
# ... and a**((2**j)*s) % n ≠ -1 for some 0 ≤ j ≤ r-1
for j in range(0, r):
if mod_exp(a, (2**j)*s, number) == number-1:
break
else:
return False
attempts -= 1
continue
# A prime will pass the test for all a.
return True
def mod_exp(base, exponent, modulus):
"""
mod_exp(b, e, m) -> value of b**e % m
Calculate modular exponentation using right-to-left binary method.
http://en.wikipedia.org/wiki/Modular_exponentiation#Right-to-left_binary_method
"""
result = 1L
while exponent > 0:
if (exponent & 1) == 1:
result = (result * base) % modulus
exponent >>= 1
base = (base * base) % modulus
return resultdef keys(bits):
"""
keys(bits) -> (public, private)
Generate public and private RSA keys of the given size.
"""
# Pragma: use a fixed e, the fourth Fermat prime (0b10000000000000001)
e = 2**16+1
while True:
# Generate two large prime numbers p and q, n = pq and φ = (p-1)(q-1)
s = bits / 2
mask = 0b11 << (s - 2) | 0b1 # two highest and the lowest bit
while True:
p = getrandbits(s) | mask
# Pragma: check p % e here to guarantee that φ and e are coprimes
if p % e != 1 and rmspp(p):
break
s = bits - s
mask = 0b11 << (s - 2) | 0b1 # same as above, but maybe different s
while True:
q = getrandbits(s) | mask
if q != p and q % e != 1 and rmspp(q):
break
n = p * q
phi = (p - 1) * (q - 1)
# Pragma: e is chosen already and is relative prime to φ
# Compute d, a modular multiplicative inverse to e (i.e. e*d % φ = 1)
d = mmi(e, phi)
if d: # if not, the process will repeat
break
return (n, e), (n, d)
ef mmi(a, m):
"""
mmi(a, m) -> x, such as ax % m = 1
mmi is a Modular Multiplicative Inverse
See http://en.wikipedia.org/wiki/Modular_multiplicative_inverse
"""
gcd, x, q = egcd(a, m)
if gcd != 1:
# The a and m are not coprimes, so the inverse doesn't exist
return None
else:
return (x + m) % m
def egcd(a, b):
"""
egcd(a, b) -> d, x, y, such as d == gcd(a, b) == ax + by
egcd is an Extended Greatest Common Divisor
http://en.wikipedia.org/wiki/Extended_Euclidean_algorithm
"""
if b == 0:
return (a, 1, 0)
else:
d, x, y = egcd(b, a % b)
return d, y, x - y * (a / b)keys() в таком случае продолжает цикл генерации).