Я сделал небольшую вспомогательную функцию:
Func<Type, string, Type[], Type[], MethodInfo> getMethod = (t, n, genargs, args) =>
{
var methods =
from m in t.GetMethods()
where m.Name == n && m.GetGenericArguments().Length == genargs.Length
let mg = m.IsGenericMethodDefinition ? m.MakeGenericMethod(genargs) : m
where mg.GetParameters().Select(p => p.ParameterType).SequenceEqual(args)
select mg
;
return methods.Single();
};
Работает для простых не-генериков:
var m_movenext = getMethod(typeof(IEnumerator), nameof(IEnumerator.MoveNext), Type.EmptyTypes, Type.EmptyTypes);
Как и для сложных дженериков:
var t_source = typeof(fillin1);
var t_target = typeof(fillin2);
var m_SelectMany = getMethod(
typeof(Enumerable),
nameof(Enumerable.SelectMany),
new[] {
t_source,
t_target
},
new[] {
typeof(IEnumerable<>).MakeGenericType(t_source),
typeof(Func<,>).MakeGenericType(t_source, typeof(IEnumerable<>).MakeGenericType(t_target))
});
Попробуйте удалить (или переименовать) файл no-global-site-packages.txt
в папке Lib
в виртуальной среде.
Где venv - это имя вашей виртуальной среды, а python3.4 соответствует какой бы то ни было версии python, например:
$ rm venv/lib/python3.4/no-global-site-packages.txt
И если вы передумаете и хотите вернуть его:
$ touch venv/lib/python3.4/no-global-site-packages.txt
Примечание: Если вы не видите указанный выше файл, значит, у вас более новая версия virtualenv. Вы захотите подписаться на этот ответ вместо
Перейдите к своей venv папке и откройте pyvenv.cfg
. (Например, если Вашу виртуальную среду назовут myenv
тогда, то файл будет расположен в myenv\pyvenv.cfg
)
, Вы будете видеть, что булевская переменная устанавливает названный include-system-site-packages
Набор, что, устанавливая на true
для использования глобальных пакетов
, Если Вы хотите отключить использующие глобальные пакеты, просто установите ту установку на false
вместо этого.
Попробуйте добавить символическую ссылку между / virtualenv_root / lib /
и / путь / к / желаемый / сайт-пакеты /