标签: python-module

Python:如何禁止从模块导入类?

我试过了:

__all__ = ['SpamPublicClass']
Run Code Online (Sandbox Code Playgroud)

但是,当然这只是为了:

from spammodule import *
Run Code Online (Sandbox Code Playgroud)

有没有办法阻止导入类.我担心我的代码的API级别会出现混淆,有人会写:

from spammodule import SimilarSpamClass
Run Code Online (Sandbox Code Playgroud)

它会导致调试混乱.

python import python-module python-import

5
推荐指数
3
解决办法
2325
查看次数

对模块的依赖注入

考虑一个模块,例如some_module,各个模块在同一解释程序中使用。该模块将具有单个上下文。为了使some_module方法起作用,它必须接收类实例的依赖项注入。

将依赖项注入模块的pythonic和优雅的方法是什么?

python dependency-injection python-module

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

Python PrettyTable示例

所以我有这个PrettyTable示例,我从文档中复制了但是我收到了一个错误.

#!/usr/bin/python

from prettytable import PrettyTable
import csv

x = PrettyTable(["City name", "Area", "Population", "Annual Rainfall"])
x.align["City name"] = "l" # Left align city names
x.padding_width = 1 # One space between column edges and contents (default)
x.add_row(["Adelaide",1295, 1158259, 600.5])
x.add_row(["Brisbane",5905, 1857594, 1146.4])
x.add_row(["Darwin", 112, 120900, 1714.7])
x.add_row(["Hobart", 1357, 205556, 619.5])
x.add_row(["Sydney", 2058, 4336374, 1214.8])
x.add_row(["Melbourne", 1566, 3806092, 646.9])
x.add_row(["Perth", 5386, 1554769, 869.4])
print x
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误.

Traceback (most recent call last):
File "/home/definity/Desktop/Cloud/code/Python/Finacial.py", line 3, in <module>
from prettytable import …
Run Code Online (Sandbox Code Playgroud)

python python-module

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

Python模块:如何防止导入新模块调用的模块

我是新手,Python正在创建一个模块以重用一些代码。我的模块(impy.py)看起来像这样(到目前为止,它只有一个功能)...

import numpy as np
def read_image(fname):
    ....
Run Code Online (Sandbox Code Playgroud)

并将其存储在以下目录中:

custom_modules/
              __init.py__
              impy.py
Run Code Online (Sandbox Code Playgroud)

如您所见,它使用了numpy模块。问题是当我从另一个脚本导入它时,就像这样...

import custom_modules.impy as im
Run Code Online (Sandbox Code Playgroud)

然后我输入im.不仅可以调用函数的选项,还可以调用read_image()模块的选项np。

如何使它仅可用于我在模块中编写的功能,而不能在模块正在调用的模块(在这种情况下为numpy)中使用?

非常感谢您的帮助。

python python-module python-import python-2.7

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

Python如何调用未导入的模块?

我用了:

import urllib.request 
Run Code Online (Sandbox Code Playgroud)

然后:

d={'value':12345}
urllib.parse.urlencode(d)
Run Code Online (Sandbox Code Playgroud)

我希望python抛出一个异常,因为我没有导入urllib.parse,而是它工作了.它是什么原因?

PS:我使用的是Python 3.3.3

python python-module

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

如何同时导入同一Python模块的两个版本?

假设我有两个版本的python软件包,称“ lib”。一个在文件夹中~/version1/lib,另一个在文件夹中~/version2/lib。我正在尝试通过执行以下操作在一个会话中加载两个软件包:

sys.path.insert(0, '~/version1')
import lib as a

sys.path.insert(0, '~/version2')
import lib as b
Run Code Online (Sandbox Code Playgroud)

但是由于缓存的原因,b它与相同,因此不起作用a。

反正有做吗?也许使用挂钩sys.meta_path?我没有弄清楚。

还是有删除进口模块缓存的方法?

python python-module python-import

5
推荐指数
2
解决办法
1914
查看次数

imp.load_source()抛出"No Module Named"错误Python 2.7

我目前正在使用Python 2.7,我正在尝试加载这样的文件:

myPlt = imp.load_source('SourceFile', 'path/to/SourceFile.py')
Run Code Online (Sandbox Code Playgroud)

但是,SourceFile.py导入模块OtherModule,它与SourceFile位于同一目录中.包结构如下所示:

/path
 .../to
      ...SourceFile.py
      ...OtherModule.py
      ...__init__.py
Run Code Online (Sandbox Code Playgroud)

当我运行load_source时,我收到错误"ImportError:No module named OtherModule"

我的load_source调用不正确吗?我应该采用另一种方式来导入SourceFile吗?

python python-module python-import python-2.7

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

管理__all__的导出装饰器

一个合适的Python模块将列出名为的列表中的所有公共符号.管理该列表可能很繁琐,因为您必须两次列出每个符号.当然有更好的方法,可能使用装饰器,因此只需将导出的符号注释为.__all__@export

你会怎么写这样的装饰师?我确定有不同的方法,所以我希望看到几个答案,其中包含足够的信息,用户可以将这些方法相互比较.

python visibility module python-module package

5
推荐指数
2
解决办法
829
查看次数

sys.meta_path和sys.path_hooks导入对象之间有什么区别?

使用importlib,“元路径查找器”(通过sys.meta_path遍历发现)和“路径条目查找器”(通过sys.path_hooks遍历发现)有什么区别?

第一种类型在导入开始时被调用,但是第二种类型何时使用?两者都返回规格对象吗?

我要实现自定义导入,可以从* .py或* .pyc以外的其他来源(例如,从流)导入模块。如何才能做到这一点?

python python-module python-import

5
推荐指数
2
解决办法
1322
查看次数

Python:替换模块类中的函数

我正在尝试替换类中定义的函数,以便在不更改实际代码的情况下修改其函数(如在内部工作中).我之前从未这样做过,因此在更换它时遇到了一些问题.更改代码将让我访问我的python库中的包,这是一个不太多的选择.

例如,如果模块名为testMOD

class testMOD(object):
      def testFunc(self, variable):
          var = variable
          self.something = var + 12
Run Code Online (Sandbox Code Playgroud)

然后我将导入testMOD,定义一个类(mytest = testMOD()),并访问类testFunc中定义的函数,并将其更改为已定义的函数.

例如,

from somemodule import testMOD
mytest = testMOD()

def alternativeFunc(self, variable):
    var = variable
    self.something = var + 1.2

#problem here
mytest.testFunc = alternativeFunc
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,如果我只是使用我定义的函数手动覆盖(?)类中的函数,它将无法正常工作.它没有给出任何语法错误,但是,问题是被替换的函数认为'self'是函数的另一个变量,并且说它需要另一个参数用于'变量'变量(我想这不是一个好名字).

我想要做的是使替换功能与被替换的功能完全相同,但需要额外的代码或一些小修改.但是,"自我"几乎不起作用,因为它应该在课堂上.是否有办法正确实现定义的函数来替换导入类的函数?

python class function python-module

5
推荐指数
2
解决办法
4771
查看次数