相关疑难解决方法(0)

如何在Python中获取对当前模块属性的引用

我想要做的就是在命令行中看起来像这样:

>>> import mymodule
>>> names = dir(mymodule)
Run Code Online (Sandbox Code Playgroud)

我怎样才能获得中定义的所有名称引用mymodule从内部mymodule本身?

像这样的东西:

# mymodule.py
names = dir(__thismodule__)
Run Code Online (Sandbox Code Playgroud)

python

111
推荐指数
4
解决办法
8万
查看次数

当存在具有相同名称的模块时从内置库导入

情况: - 我的project_folder中有一个名为calendar的模块 - 我想使用Python库中的内置Calendar类 - 当我使用日历导入日历时,它会抱怨因为它试图从我的模块加载.

我做了一些搜索,似乎无法找到问题的解决方案.

任何想法,而无需重命名我的模块?

python import

108
推荐指数
4
解决办法
5万
查看次数

使用python3从jupyter笔记本中相对导入的另一个目录中的模块导入本地函数

我有一个类似于以下的目录结构

meta_project
    project1
        __init__.py
        lib
            module.py
            __init__.py
    notebook_folder
        notebook.jpynb
Run Code Online (Sandbox Code Playgroud)

notebook.jpynb我尝试使用相对导入来访问函数function()module.py使用:

from ..project1.lib.module import function
Run Code Online (Sandbox Code Playgroud)

我收到以下错误

SystemError                               Traceback (most recent call last)
<ipython-input-7-6393744d93ab> in <module>()
----> 1 from ..project1.lib.module import function

SystemError: Parent module '' not loaded, cannot perform relative import
Run Code Online (Sandbox Code Playgroud)

有没有办法让这个使用相对导入工作?

请注意,笔记本服务器在meta_project目录级别实例化,因此它应该可以访问这些文件中的信息.

另请注意,至少与最初的预期project1并未被视为模块,因此没有__init__.py文件,它只是作为文件系统目录.如果问题的解决方案需要将其视为一个模块并包含一个__init__.py文件(即使是空白文件),那么这样做是不错的,但这样做不足以解决问题.

我在机器和相对导入之间共享这个目录允许我在任何地方使用相同的代码,并且我经常使用笔记本进行快速原型设计,因此涉及黑客攻击绝对路径的建议不太可能有用.


编辑:这与Python 3中的相对导入不同,Python 3通常讨论Python 3中的相对导入,特别是从包目录中运行脚本.这与在jupyter笔记本中工作有关,该笔记本试图在另一个具有不同的一般和特定方面的目录中的本地模块中调用函数.

python relative-import jupyter-notebook

86
推荐指数
7
解决办法
6万
查看次数

Python库路径

在ruby中,库路径是$:在perl中提供的@INC- 如何在导入时获取Python搜索模块的路径列表?

python

65
推荐指数
4
解决办法
16万
查看次数

导入任意python源文件.(Python 3.3+)

如何.pyPython 3.3+中导入任意python源文件(其文件名可以包含任何字符,并不总是以其结尾)?

我使用imp.load_module如下:

>>> import imp
>>> path = '/tmp/a-b.txt'
>>> with open(path, 'U') as f:
...     mod = imp.load_module('a_b', f, path, ('.py', 'U', imp.PY_SOURCE))
...
>>> mod
<module 'a_b' from '/tmp/a-b.txt'>
Run Code Online (Sandbox Code Playgroud)

它仍然适用于Python 3.3,但根据imp.load_module文档,它已被弃用:

从版本3.3开始不推荐使用:不需要使用加载器来加载模块,并且不推荐使用find_module().

imp模块文档建议使用importlib:

注意新程序应使用importlib而不是此模块.

在不使用已弃用的imp.load_module函数的情况下,在Python 3.3+中加载任意python源文件的正确方法是什么?

python python-3.x python-3.3

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

导入python模块不在路径上

我有一个模块foo,包含util.py和bar.py.

我想在IDLE或python会话中导入它.我该怎么做?

我找不到关于如何导入不在当前目录或默认python PATH中的模块的文档.尝试后import "<full path>/foo/util.py",和from "<full path>" import util

我能得到的最接近的是

import imp
imp.load_source('foo.util','C:/.../dir/dir2/foo')
Run Code Online (Sandbox Code Playgroud)

这给了我在Windows 7上的权限被拒绝.

python import external python-module

49
推荐指数
2
解决办法
9万
查看次数

Python 3.4:如何在给定完整路径的情况下导入模块?

如何根据Python的完整路径在Python 3.4中加载Python模块?

类似的问题如何在给定完整路径的情况下导入模块?涵盖了3.4之前的Python版本,但结论是Python 3.4中的支持已经弃用了所提出的答案,因此对于Python 3.4的任何解决方案都表示赞赏.

请注意,此问题不是Import abitrary python源文件的副本.(Python 3.3+),因为对此的回答也使用loader.load_module()了Python 3.4中不推荐使用的内容,如回答所述,详细介绍请考虑将importlib.abc.Loader.load_module()和文档放在importlib中.

因此,需要在Python 3.4中通过完整路径导入模块的支持解决方案.

python python-3.x

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

如何从其他目录导入.py文件?

我有这种文件结构(目录和箭头文件后):

model -> py_file.py 
report -> other_py_file.py
Run Code Online (Sandbox Code Playgroud)

主要__init__.py:

import model
import report
Run Code Online (Sandbox Code Playgroud)

型号目录:

import py_file
Run Code Online (Sandbox Code Playgroud)

报告目录:

import other_py_file
Run Code Online (Sandbox Code Playgroud)

现在在other_py_file我想要导入py_file,但是我尝试了什么,我给出错误,没有这样的模块.

我试过这个: from model import py_file

然后: import py_file

看起来这两个文件夹看不到对方.从其他目录导入文件的方法是什么?我是否需要在init .py文件中指定一些额外的导入?

python python-import openerp

30
推荐指数
2
解决办法
13万
查看次数

Python 3.5+:如何在给定完整文件路径的情况下动态导入模块(在存在隐式兄弟导入的情况下)?

标准库清楚地记录了如何直接导入源文件(给定源文件的绝对文件路径),但如果源文件使用隐式同级导入,则此方法不起作用,如下例所示.

如果这个例子适用于隐式兄弟导入的存在?

我已经签出这个这个其他的话题#1的问题,但他们并没有解决隐同级进口用手导入的文件.

设置/实施例

这是一个说明性的例子

目录结构:

root/
  - directory/
    - app.py
  - folder/
    - implicit_sibling_import.py
    - lib.py
Run Code Online (Sandbox Code Playgroud)

app.py:

import os
import importlib.util

# construct absolute paths
root = os.path.abspath(os.path.dirname(os.path.dirname(os.path.realpath(__file__))))
isi_path = os.path.join(root, 'folder', 'implicit_sibling_import.py')

def path_import(absolute_path):
   '''implementation taken from https://docs.python.org/3/library/importlib.html#importing-a-source-file-directly'''
   spec = importlib.util.spec_from_file_location(absolute_path, absolute_path)
   module = importlib.util.module_from_spec(spec)
   spec.loader.exec_module(module)
   return module

isi = path_import(isi_path)
print(isi.hello_wrapper())
Run Code Online (Sandbox Code Playgroud)

lib.py:

def hello():
    return 'world'
Run Code Online (Sandbox Code Playgroud)

implicit_sibling_import.py:

import lib # this is the …
Run Code Online (Sandbox Code Playgroud)

python import python-3.x python-importlib

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

Python/ImportError:不支持按文件名导入

我正在尝试将python文件导入我的应用程序,该文件是用python编写的.

我有以下代码:

import os
from os.path import basename

class specificClass:
    def dothing(self,path):
          runcommand = __import__("/root/"+ os.path.splitext(os.path.basename(path))[0]+ "/" + os.path.splitext(os.path.basename(path))[0] +"/sa/update.py")
          runcommand.main()
Run Code Online (Sandbox Code Playgroud)

当我运行它时,它给我以下错误:

ImportError: Import by filename is not supported.
Run Code Online (Sandbox Code Playgroud)

python

25
推荐指数
1
解决办法
6万
查看次数