Только для добавления regex, который является менее сумасшедшим, чем тот, перечисленный @mmaibaum:
^[a-zA-Z]([.]?([a-zA-Z0-9_-]+)*)?@([a-zA-Z0-9\-_]+\.)+[a-zA-Z]{2,4}$
Это не является пуленепробиваемым, и конечно не покрывает всю почтовую спецификацию, но это действительно делает достойное задание покрытия наиболее основных требований. Еще лучше это несколько понятно, и может быть отредактировано.
Запертый из обсуждения в HouseOfFusion.com , ресурс ColdFusion мирового класса.
Если MySQLdb теперь распространяется способом, требующим setuptools
, вы можете либо загрузить последний (например, из здесь ), либо выполнить рефакторинг MySQLdb. .py для обхода setuptools
(возможно, вместо этого можно будет просто импортировать setup
и Extension
из простого distutils
], но вам также может потребоваться отредактировать некоторые из файлов setup _ *. py
в том же каталоге).
В зависимости от того, как настроена установка Python на вашем сайте, установка расширений для вашего личного использования без прав sysadm может быть сложной, но это никогда по-настоящему невозможно, если у вас есть доступ к оболочке. Вам нужно будет настроить свой Python sys.path, чтобы начать с собственного каталога, который '
Для меня это тоже было непросто, я сделал следующее, и оно сработало очень хорошо.
chmod
яйцо, которое будет исполняться: chmod a + x [egg]
(т.е. для Python 2.6, chmod a + x setuptools-0.6c9-py2.6.egg
) ./ [egg]
(т.е. для Python 2.6 , ./ setuptools-0.6c9-py2.6.egg
) Не уверен, нужно ли вам использовать sudo, если вы просто устанавливаете его для текущего пользователя. Он обязательно понадобится вам, чтобы установить его для всех пользователей.
#!/usr/bin/env python
import os
import sys
from **distutils.core** import setup, Extension
if sys.version_info < (2, 3):
raise Error("Python-2.3 or newer is required")
if os.name == "posix":
from setup_posix import get_config
else: # assume windows
from setup_windows import get_config
metadata, options = get_config()
metadata['ext_modules'] = [Extension(sources=['_mysql.c'], **options)]
metadata['long_description'] = metadata['long_description'].replace(r'\n', '')
setup(**metadata)
Также вы можете увидеть зависимости сборки в файле setup.cfg