linux python 包安装了 为啥包不能导入

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux python 包安装了 为啥包不能导入相关的知识,希望对你有一定的参考价值。

你正确安装了吗?比如安装media包,不能pip install media就行了,虽然这个命令能通过。最好看一下这个包的教程说明之类的。 参考技术A 你想导入第三方库吗?如果是,import xxx,其中xxx为第三方库的名称,例如import os,其中os为python自带的第三方库 参考技术B 能把问题描述清楚一点吗

为啥 Python 类初始化变量不能用于包导入中的类实例对象,但否则?

【中文标题】为啥 Python 类初始化变量不能用于包导入中的类实例对象,但否则?【英文标题】:Why is a Python class initialized variable not available to a class instance object from a package import but is otherwise?为什么 Python 类初始化变量不能用于包导入中的类实例对象,但否则? 【发布时间】:2018-07-27 19:30:07 【问题描述】:

嘿嘿...我正在学习装饰器。有趣的东西。我想我错过了一些东西,或者可能不是装饰器,而是我如何处理课程?当我在终端中执行此操作时,它可以工作:

class Client:
    """The main client."""

    def __init__(self, config, creds):
        """Initialize."""
        self.config = config
        self.creds = creds

    def context(func, *args, **kwargs):
        @wraps(func)
        def func_with_context(*args, **kwargs):
            print(f'contextualizing func.__name__')
            print(creds.user_name)
            return (args, kwargs)
        return func_with_context

    @context
    def test(self, creds):
        pass 

我有两个可以实例化并传入的包对象:

creds = mypackage.credentials.auto()
config = mypackage.Configuration()

然后当我这样做时:

client = Client(config, creds)
client.test('yo')
>>>contextualizing test
username@org
((<__main__.Client object at 0x101b66208>, 'yo'), )

但是当我从包本身这样做时,我得到了

import mypackage as mypackage
client = mypackage.Client(config, creds)
client.test('yo')
contextualizing test
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/dblack/Code/mypackage/mypackage/client.py", line 51, in func_with_context
    creds.user_name,
NameError: name 'creds' is not defined

为什么当我只声明一个类而不是在包命名空间中时这会起作用?

【问题讨论】:

你的print函数中不应该是self.creds吗? @ThomasKühn 我收到类似的错误:Traceback (most recent call last): File "&lt;stdin&gt;", line 1, in &lt;module&gt; File "/Users/dblack/Code/mypackage/mypackage/client.py", line 45, in func_with_context print(self.creds.user_name) NameError: name 'self' is not defined 因为您的方法参数中也漏掉了self @khelwood 我无法在该方法参数中声明 self (为什么它被删除)。通过将其添加到def context(self, func, *args, **kwargs): 我们得到:TypeError: context() missing 1 required positional argument: 'func' 但是你可以将它添加到func_with_context,因为它应该替换一个方法 【参考方案1】:

由于func_with_context 将代替方法,它应该有一个self 参数。然后在其中,您可以使用self.creds 引用creds 属性。

def context(func, *args, **kwargs):
    @wraps(func)
    def func_with_context(self, *args, **kwargs):
        print(f'contextualizing func.__name__')
        print(self.creds.user_name)
        return (args, kwargs)
    return func_with_context

【讨论】:

请注意,也没有理由在类中定义context,因为它只是一个常规函数。 @chepner 谢谢。这是一个精简版。它在我正在编写的模块中更有意义,但我想我明白你为什么这么说。

以上是关于linux python 包安装了 为啥包不能导入的主要内容,如果未能解决你的问题,请参考以下文章

为啥客户的python包无法导入?

请问一下python中已经安装过pandas包,但是导入的时候为啥发生这个错误,应该怎么解决

为啥在java中不能导入awt包

Linux终端为啥不能显示中文?

python导入包错误

pandas库明明安装成功了,为啥总是导入错误?