标签: python-import

python中的导入规则是什么?

我有一个目录结构:

../POC/mud/
            client/
            common/
            server/

我正在尝试使用以下导入:

from mud.server import config
from mud.common.lib import util

但是当我尝试导入配置时,我收到一个错误:

Python 2.6.6 (r266:84292, Sep 15 2010, 16:22:56) 
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from mud.server import config
Traceback (most recent call last):
  File "", line 1, in 
ImportError: No module named mud.server
>>> from mud.common.lib import util
Traceback (most recent call last):
  File "", line 1, in 
ImportError: No module named mud.common.lib
>>> 

我是否需要在某个位置才能使导入工作,或者需要在操作系统上编译模块?这些"泥"模块只是python .py文件的集合

python python-module python-import

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

为什么不为我导入工作? - Python

每当我尝试将文件导入python时,都会出现此错误(或类似):

Traceback (most recent call last):
  File "C:/Python33/My Files/username save.py", line 1, in <module>
    import keyring.py
ImportError: No module named 'keyring'
Run Code Online (Sandbox Code Playgroud)

我正在尝试创建一个密码存储程序,我正在寻找保持密码安全的好方法,有人说使用导入密钥环,所以我做了,除了它,它永远不会工作.我一定是做错了什么,但每当我为python寻找任何东西时,它都不适合我.几乎就像载荷已经多年来一直在变化.

和想法?

python python-import

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

Python内部 - 对象如何知道全局变量?

我最近发现了一些有趣的行为让我想知道对象如何知道存在哪些全局变量.例如,假设我有一个文件"test.py":

globalVar = 1
toDelete = 2

class Test(object):
    classVar = 3

    def runTest1(self):
        print globalVar
        print toDelete
        print missingVar

    def runTest2(self):
        print self.classVar
        print toCreate
        print missingVar
Run Code Online (Sandbox Code Playgroud)

然后在交互式shell中我这样做:

>>> import test
>>> tester = test.Test()
>>> tester.runTest1()
1
2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "test.py", line 10, in runTest1
    print missingVar
NameError: global name 'missingVar' is not defined
>>> tester.runTest2()
3
Traceback (most recent call last):
  File "<stdin>", line 1, in <module> …
Run Code Online (Sandbox Code Playgroud)

python python-module global-variables python-import python-2.7

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

Pythonic方式来处理导入错误

我在我的项目中使用自定义日志记录模块.如果它不可用,我想用假人代替它而不是提高ImportError.

这是当前执行此操作的代码:

try:
    import logger
except ImportError:
    print 'Couldn\'t load logger'

    class DummyLogger(object):
        def __init__(self):
            pass
        def log(self, image):
            pass

    logger = DummyLogger()
Run Code Online (Sandbox Code Playgroud)

我不认为这是一个优雅的解决方案.它确实有效,但它并不好.有没有更好的办法?

python import python-import

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

从另一个文件调用Python函数

这个问题困扰了我好几天.

我有两个文件,helpers.pylauncher.py.

helpers.py我已经定义了函数hello(),它打印"你好".

我想打电话hello()launcher.py.

这就是我写的launcher.py:

from helpers import hello
....
helpers.hello()
Run Code Online (Sandbox Code Playgroud)

但是当我运行它时,我得到了这个:

    from helpers import hello
ImportError: No module named helpers
Run Code Online (Sandbox Code Playgroud)

我该如何解决?

编辑以回答答案/评论

  1. 我正在使用OS X和Python 3.4
  2. 这两个文件位于同一目录中
  3. 我尝试了两种方式:

    from helpers import hello
    hello()
    
    Run Code Online (Sandbox Code Playgroud)

    import helpers
    helpers.hello()
    
    Run Code Online (Sandbox Code Playgroud)

    但仍然是这个错误:

    import helpers
    ImportError: No module named 'helpers'
    
    Run Code Online (Sandbox Code Playgroud)

我认为终端的CLASSPATH应该有问题.

第二次编辑

这些 答案中突出显示的问题是一个问题,但最终重置了已解决的类路径.

python python-import importerror

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

Python 2 与 Python 3 导入

我有一个用 Python 编写的脚本。作者决定使用仅在 Python 3 中可用的新功能,因此我不得不更新我的版本。

现在我遇到了麻烦,因为脚本在导入语句上崩溃,所以我决定进行一些调试。我得出的结论是,我的 Python 3 无法ImagePIL.

在 Python 2 中:

Python 2.7.10 (default, Aug 22 2015, 20:33:39) 
[GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.0.59.1)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from PIL import Image
Run Code Online (Sandbox Code Playgroud)

不会给出错误,但在 Python 3 中:

Python 3.5.0 (v3.5.0:374f501f4567, Sep 12 2015, 11:00:19) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from …
Run Code Online (Sandbox Code Playgroud)

python python-import python-2.7 pillow python-3.5

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

如何重新定义我在python中导入的函数使用的函数?

我导入一些模块Foo并使用Foo该模块中定义的类.该类具有f调用g该模块Foo本身导入的另一个函数的函数module_with_g.我想在实例化时重新定义gf用法的定义Foo.这里有3个文件显示了这种情况.

Foo.py

from module_with_g import g

class Foo:
    def f(self):
        x = 'bar'
        g(x)
Run Code Online (Sandbox Code Playgroud)

module_with_g.py

def g(x):
    print(x + x)
Run Code Online (Sandbox Code Playgroud)

module_with_modified_Foo_f.py

import Foo

def new_g(x):
    print(x + x + x)

if __name__ == '__main__':
    foo =  Foo.Foo()
    foo.f()
Run Code Online (Sandbox Code Playgroud)

运行最后一个脚本给出barbar.我想要的是让我们foo.f使用自己的功能而不是它g,我希望得到它barbarbar.

我自己的尝试是尝试使用装饰器以某种方式重新定义foo.f,但我没有任何运气.

module_with_modified_Foo_f.py

import Foo

def new_g(x):
    print(x + x + x)

def redefine_f(f): …
Run Code Online (Sandbox Code Playgroud)

python decorator python-import python-3.x

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

从另一个包导入Cython标头

我有一个名为的包A:

A/
  __init__.py
  _test.pyx
Run Code Online (Sandbox Code Playgroud)

我有另一个包的来源B:

B/
  __init__.py
  _wrapper.pxd
  _other.pxd
  _other.pyx
Run Code Online (Sandbox Code Playgroud)

_wrapper.pxd包装C库.我想cimport _wrapper.pxd参加A/_test.pyx

所以我这样做_test.pyx:

from B cimport _wrapper
Run Code Online (Sandbox Code Playgroud)

setup.py看起来像这样:

ext_modules = cythonize([
           Extension("A._test", ["src/A/_test.pyx"], include_dirs=["/path/to/B", "."])])
Run Code Online (Sandbox Code Playgroud)

当我编译时,我会B.pxd not found遇到一堆错误.

如何从另一个包中导入cython模块到我的包中?

python cython python-import

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

如何重新加载所有导入的模块?

我有几个模块,在开发Sublime Text软件包时,我想重新加载而不必重新启动Sublime Text。

我正在运行Sublime Text内部版本3142,该版本python3.3连续运行其软件包/插件。但是,在开发插件时,我将添加到path的第三方模块导入为:

import os
import sys

def assert_path(module):
    """
        Import a module from a relative path
        /sf/ask/19546621/
    """
    if module not in sys.path:
        sys.path.insert( 0, module )

current_directory = os.path.dirname( os.path.realpath( __file__ ) )
assert_path( os.path.join( current_directory, 'six' ) ) # https://github.com/benjaminp/six

import six
Run Code Online (Sandbox Code Playgroud)

但是,当我编辑模块的源代码时,six我需要再次关闭并打开Sublime Text,否则Sublime Text无法获取对sixpython模块的更改。


到目前为止我尝试过的一些代码:

print( sys.modules )
import git_wrapper
imp.reload( find_forks )
imp.reload( git_wrapper )
imp.reload( sys )
Run Code Online (Sandbox Code Playgroud)
  1. 从控制台重新加载python模块的正确方法
  2. 重新加载模块,给出NameError:名称'reload'未定义

python module python-import python-3.x

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

使用PyCharm导入模块时出现错误,而使用Jupyter Notebook时不会发生错误

对于项目,我需要从可变数据源导入DICOM文件。我将在PyCharm中从事该项目,因为我最终将迭代代码,最终产品将是程序。我得到的错误如下:


2017-10-10 08:58:16.307 Python [1010:26876]-[NSApplication _setup:]:无法识别的选择器已发送到实例0x105154320

2017-10-10 08:58:16.311 Python [1010:26876] ***由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'-[NSApplication _setup:]:无法识别的选择器已发送至实例0x105154320'

***首先抛出调用堆栈:

0   CoreFoundation                      0x00007fff9e92757b __exceptionPreprocess + 171
1   libobjc.A.dylib                     0x00007fffb3b801da objc_exception_throw + 48
2   CoreFoundation                      0x00007fff9e9a7f14 -[NSObject(NSObject) doesNotRecognizeSelector:] + 132
3   CoreFoundation                      0x00007fff9e89ac93 ___forwarding___ + 1059
4   CoreFoundation                      0x00007fff9e89a7e8 _CF_forwarding_prep_0 + 120
5   Tk                                  0x000000010438cc02 TkpInit + 471
6   Tk                                  0x00000001043082a9 Tk_Init + 1794
7   _tkinter.cpython-36m-darwin.so      0x00000001041e0dfd Tcl_AppInit + 77
8   _tkinter.cpython-36m-darwin.so      0x00000001041de849 _tkinter_create + 889
9   Python                              0x000000010006a7b8 _PyCFunction_FastCallDict + 552
10  Python                              0x00000001000f4164 call_function + …
Run Code Online (Sandbox Code Playgroud)

python python-import pycharm jupyter-notebook

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