相关疑难解决方法(0)

如何测试是否导入了一个python模块?

如何测试模块是否已在python中导入?

例如,我需要基础知识:

if not has_imported("sys"):
   import sys
Run Code Online (Sandbox Code Playgroud)

if not has_imported("sys.path"): 
   from sys import path
Run Code Online (Sandbox Code Playgroud)

谢谢!

RGS.

感谢您的所有评论:代码已粘贴在此处. 自动导入文件夹中的所有子模块然后调用相同的名称函数 - python runtime inspect相关

python testing import module

44
推荐指数
3
解决办法
4万
查看次数

为什么在Python 3中的'sys.modules'中没有导入模块?

我正在阅读如何检查是否已导入python模块并且说明似乎很清楚,检查中的模块sys.modules.这正如我在Python 2中所期望的那样,但不适用于Python 3(3.5和3.6测试).例如:

Python 3.6

>>> import sys
>>> 'itertools' in sys.modules
True
Run Code Online (Sandbox Code Playgroud)

Python 2.7

>>> import sys
>>> 'itertools' in sys.modules
False
Run Code Online (Sandbox Code Playgroud)

我注意到,itertools在Python 3 sys.modules dict(<module 'itertools' (built-in)>)中被描述为"内置" ,而不是在Python 2中,所以也许这就是它在sys.modules导入之前的原因,但它没有作为内置列出.无论如何,既然itertools仍然需要在Python 3中导入,我将不胜感激.

python import python-import python-2.7 python-3.x

10
推荐指数
1
解决办法
821
查看次数

为什么 Python 说模块已导入,但实际上并未导入?

Python 3.6.5

使用这个答案math作为指导,我尝试查看是否导入了某些模块,例如。

但 Python 告诉我它们都被导入了,而实际上它们并没有导入。

>>> import sys
>>> 'math' in sys.modules
True
>>> 'math' not in sys.modules
False
>>> math.pi
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'math' is not defined
>>> import math
>>> 'math' in sys.modules
True
>>> math.pi
3.141592653589793
Run Code Online (Sandbox Code Playgroud)

python

8
推荐指数
1
解决办法
255
查看次数

是否可以使用python / pytest来测试测试相关性是否尚未泄漏到真实代码中

TL; DR:如果我使用的pytest还有其他一些仅测试的依赖项,是否可以断言这些仅测试的依赖项没有泄漏到实际的非测试代码中?

在Java中,当我运行测试时,测试本身和被测代码将在不同的类加载器中运行,并且它们的依赖关系在此作用域内。因此,如果无意中引用testng了被测代码,则即使testng正在运行测试,测试也将失败。

可以在Python中实现吗?如果我的非测试代码不小心导入了pytest,我可以抓住它并使测试失败吗?我看不到如何实现这一目标。

虽然setuptoolspip等,使其比较容易保持安装/运行和开发/测试的依赖分开,甚至避免污染当前VENV,他们仍然存在测试运行时。这意味着python setup.py test可以通过模块运行,但是python setup.py install导入该模块之后却很简单。

鉴于: cat setup.py

from setuptools import setup, find_packages

setup(
    name="brettpy",
    version="0.0.1",
    packages=find_packages(),
    setup_requires=["pytest-runner",],
    tests_require=["pytest",],
)
Run Code Online (Sandbox Code Playgroud)

cat setup.cfg

[aliases]
test=pytest
Run Code Online (Sandbox Code Playgroud)

cat brettpy/__init__.py

import pytest
Run Code Online (Sandbox Code Playgroud)

cat tests/test_brettpy.py

def test_import_brettpy():
    import brettpy
    del brettpy

def test_run_main():
    from brettpy import __main__ as main
    main.main()
Run Code Online (Sandbox Code Playgroud)

... python setup.py test将通过,但python setup.py install && python -m brettpy失败:

ModuleNotFoundError: No …
Run Code Online (Sandbox Code Playgroud)

python pytest

5
推荐指数
1
解决办法
169
查看次数

从字符串importlib.reload模块?

我想用来importlib重新加载其名称是动态生成的模块。

例:

import sys

def some_func():
    return "sys"

want_reload = some_func()
Run Code Online (Sandbox Code Playgroud)

现在如何sys使用变量重新加载模块want_reload?我不能直接提供给它,importlib.reload()因为它说它需要一个模块,而不是str。

如果提供了无效的字符串或未加载的模块,则可能会更好,例如"........"引发异常。

python-3.x python-importlib

4
推荐指数
2
解决办法
1144
查看次数

重新加载模块会提供导入时最初无法使用的功能.我在哪里可以了解更多相关信息?

这段代码解决了我遇到的问题.但是,没有重新加载就无法使用"setdefaultencoding".

什么是这种语言的怪癖叫什么?为什么我之前没有告诉过?我在哪里可以阅读更多相关信息.

import sys;
reload(sys);
sys.setdefaultencoding("utf8")
Run Code Online (Sandbox Code Playgroud)

http://mypy.pythonblogs.com/12_mypy/archive/1253_workaround_for_python_bug_ascii_codec_cant_encode_character_uxa0_in_position_111_ordinal_not_in_range128.html

python

1
推荐指数
1
解决办法
232
查看次数