相关疑难解决方法(0)

在Python中卸载模块

TL/DR:

import gc, sys

print len(gc.get_objects()) # 4073 objects in memory

# Attempt to unload the module

import httplib
del sys.modules["httplib"]
httplib = None

gc.collect()
print len(gc.get_objects()) # 6745 objects in memory
Run Code Online (Sandbox Code Playgroud)

更新 我已经与Python开发人员联系了这个问题,事实上,"未来五年" 无法完全卸载模块.(见链接)

请接受Python确实不支持在2.x中卸载严重,基本,不可克服的技术问题的模块.


在我最近在我的应用程序中搜索memleak期间,我将其缩小到模块,即我无法收集卸载的模块.使用下面列出的任何方法卸载模块会在内存中留下数千个对象.换句话说 - 我无法在Python中卸载模块...

剩下的问题是尝试以某种方式垃圾收集模块.

我们试试吧:

import gc
import sys

sm = sys.modules.copy()  # httplib, which we'll try to unload isn't yet 
                         # in sys.modules, so, this isn't the source of problem

print len(gc.get_objects()) # 4074 objects in …
Run Code Online (Sandbox Code Playgroud)

python memory-leaks

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

如何动态导入python模块函数?

假设def my_function():位于my_apps.views中,我想动态导入"my_function"而不使用像exec或eval这样的东西.

无论如何要做到这一点.我想做类似的事情:

my_function = import_func("my_apps.views.my_function")

my_function()...代码被执行

python import module function

18
推荐指数
2
解决办法
1万
查看次数

如何在运行时向模块添加属性?

我需要在运行时添加模块属性.例如,加载模块时,它会读取包含数据的文件.我希望这些数据可用作模块属性,但数据仅在运行时可用.

如何在运行时添加模块属性?

python

15
推荐指数
3
解决办法
1万
查看次数

Python importlib import_module将*添加到全局变量

尝试globals()根据一些动态环境变量动态添加设置属性。

import os
from importlib import import_module


# To support environment variables as the means of specifying
# the target environment as an alternative to using the --settings flag
# where MY_ENV is 'local', 'development', 'staging', 'production'
if os.environ.get('MY_ENV'):
    env = os.environ.get('MY_ENV')
    import_module('my.settings.%s' % env, '*')
Run Code Online (Sandbox Code Playgroud)

它的理解是import_module需要分配给一个变量:

foo = import_module('path.to.package', 'bar')
Run Code Online (Sandbox Code Playgroud)

然后:

globals()[foo] = foo
Run Code Online (Sandbox Code Playgroud)

可以将其添加到global范围。

但是,使用通配符*怎么办?

globals()[*] = import_module('path.to.package', '*')
Run Code Online (Sandbox Code Playgroud)

显然,以上情况导致语法错误。

python

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

如何从Python中的不同文件夹导入所有文件

__init__.py在目录中,我能够将其导入

from subdirectory.file import *
Run Code Online (Sandbox Code Playgroud)

但我希望导入该子目录中的每个文件;所以我试过了

from subdirectory.* import *
Run Code Online (Sandbox Code Playgroud)

这不起作用。有什么建议?

python python-import importerror

3
推荐指数
2
解决办法
1万
查看次数