相关疑难解决方法(0)

Python 3中星型导入的功能形式是什么

import *在Python中使用函数(大概来自importlib)的等价物是什么?

我知道您可以导入一个模块mod = __import__(...),该模块将委托给当前配置的实现.你也可以这样做

mod_spec = importlib.utl.spec_from_file_location(...)
mod = importlib.util.module_from_spec(mod_spec)
mod_spec.loader.exec_module(mod)
Run Code Online (Sandbox Code Playgroud)

这允许你做一些疯狂的事情,比如通过在调用之前插入东西将东西注入模块exec_module.(由/sf/answers/4738471//sf/answers/2705561491/提供)

但是,我的问题仍然存在.import *功能形式如何工作?什么函数根据存在/内容确定从模块加载哪些名称__all__

python python-import python-3.x

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

如何为django项目构建sphinx文档

我有一个django项目,我在docstrings中使用reST来记录以下内容:

  1. 在IDE中帮助diagloags
  2. 稍后使用Sphinx构建HTML文档

我的文档在IDE(PyCharm)中正确显示,但我无法配置Sphinx为我生成HTML文档.

这是我的项目的结构

+--------------------------------------------+
|  /saassapp         # django project path   |
|     /docs          # dir for sphinx        |
|        conf.py     # sphinx config file    |
|        ...                                 |
|     settings.py    # django settings       |
|     /studyview     # django app            |
|        ...
|     ...                                    |
+--------------------------------------------+
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?对conf.py文件的检查非常有用.谢谢.

编辑

我的项目名称是saassapp,我试图制作文档的模块叫做studyview.

python django documentation documentation-generation python-sphinx

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

如何将文件"源"到python脚本中

我有一个/etc/default/foo包含一行的文本文件:

FOO="/path/to/foo"
Run Code Online (Sandbox Code Playgroud)

在我的python脚本中,我需要引用变量FOO.

将文件"源" /etc/default/foo到我的python脚本中的最简单方法是什么,就像我在bash中一样?

. /etc/default/foo
Run Code Online (Sandbox Code Playgroud)

python bash python-2.7

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

从模块动态导入类

我有一个叫做'my_class'放入的课程'my_module'.我需要导入这个类.我试着这样做:

import importlib
result = importlib.import_module('my_module.my_class')
Run Code Online (Sandbox Code Playgroud)

但它说:

ImportError: No module named 'my_module.my_class'; 'my_module' is not a package
Run Code Online (Sandbox Code Playgroud)

所以.我可以看到它只适用于模块,但不能处理类.如何从模块导入类?

python python-3.x python-importlib

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

安装未通过conda或pip找到的shapefile/shapelib

我正在尝试使用Windows 8,Anaconda和iPython 阅读shapefile,以便在本教程之后查看城市中的郊区.

我在命令提示符下尝试了"conda install shapefile"和"pip install shapefile",两者都返回"错误:找不到匹配的包:shapefile".

除此之外,我尝试按照这些链接手动添加它[1] 如何在给定完整路径的情况下导入模块? [2] 导入python模块不在路径上.但是我收到许可错误,这表明我无论如何都没有正确导入它们.

有关如何进行或最佳实践的任何建议表示赞赏.

python gis matplotlib ipython anaconda

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

Python - 从不是包的目录导入模块

我有这样的目录结构......

dir/
  build.py
dir2
  dir3/
  packages.py
Run Code Online (Sandbox Code Playgroud)

现在的build.py需求packages.py- 并注意dir2不是一个包.

那么什么是packages.py加载的最佳方式build.py(目录结构无法更改)

编辑

sys.path.append解决方案似乎不错-但有一两件事-我需要使用packages.py很少的文件-并保持sys.path包括很少使用的目录,但在前面-那是最好的事情?

编辑二

我认为imp解决方案是最好的.

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

编辑III

对于Python 3.x

请注意,imp.load_source其他一些功能已被弃用.所以你应该使用imp.load_module今天.

fp, pathname, description = imp.find_module('packages', '/path/to/packages.py')
try:
    mod = imp.load_module('packages', fp, pathname, description)
finally:
    # since we may exit via an exception, close fp explicitly
    if fp:
        fp.close()
Run Code Online (Sandbox Code Playgroud)

python python-3.x

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

Python3 importlib.util.spec_from_file_location 与相对路径?

有很多关于如何导入相关包或通过显式位置的python问题(链接到两个流行示例)。

此外,总有 文档

读完这篇文章后,我仍然不太确定规范是什么,它们与模块的关系如何,以及为什么需要对其进行标记。

因此,对于不理解的人,您能否尝试解释一下如何做到这一点(以编程方式以及幕后的含义)

例如

如果我有

proj-dir
--mod1
--|--__init__.py
--|--class1.py
--mod2
--|--__init__.py
--|--class2.py
Run Code Online (Sandbox Code Playgroud)

如何将 mod2 导入 mod1?

import sys
sys.path.insert(0, "../mod2")
Run Code Online (Sandbox Code Playgroud)

这在技术上是有效的,但我担心如果我尝试腌制对象并在其他地方使用它们,将来可能会导致问题......

明确定位建议

import importlib.util
spec = importlib.util.spec_from_file_location("module.name", "/path/to/file.py")
foo = importlib.util.module_from_spec(spec)
spec.loader.exec_module(foo)
foo.MyClass()
Run Code Online (Sandbox Code Playgroud)

所以在这种情况下,我只是这样做:

import importlib.util
spec = importlib.util.spec_from_file_location("mod2.class2", "../mod2/class2.py")
foo = importlib.util.module_from_spec(spec)
spec.loader.exec_module(foo)
foo.MyClass()
Run Code Online (Sandbox Code Playgroud)

??

python

9
推荐指数
1
解决办法
6465
查看次数

如何在python项目之间共享代码?

假设我有两个具有以下结构的项目:

/项目1
/项目2

现在我开发了一个对这两个项目都有用的函数/类。我想把它放在 project1/project2 目录之外的某个地方,并将它作为一个单独的项目进行维护。所以我可能需要这样的结构:

/项目1
/项目2
/共享

如果我将辅助函数/类放在共享文件夹中的项目中,如何从 project1/project2 使用它们?

目前我的选择是在 project1/project2 中使用 sys.path.append('/shared') ,然后从共享文件夹导入。

有没有更多的pythonic方法来做同样的事情?

shared-libraries python-3.x

9
推荐指数
1
解决办法
3480
查看次数

Python:动态"从"导入

所以我试图改变一堆"来自x import x"的语句,看起来像这样:

from class_foo import class_foo
Run Code Online (Sandbox Code Playgroud)

变成动态的东西.我正在尝试将路径传递到目录并让它导入其中的所有模块.

def dynamicImport(dirPath):
    filez = os.listdir(dirPath)
    for file in filez:
        if "class" in file:
            oname = file[:-3] #cut off the file extension, trivial

            imp_statement = "from " + oname + " import " + oname
            #when I print imp_statement, I can verify it's being concatenated correctly

            exec(imp_statement)
Run Code Online (Sandbox Code Playgroud)

当我运行此函数并将其传递给路径时,语句字符串正在正确创建并且不会产生错误,但稍后我将尝试访问其中一个导入的对象,并且会发生以下情况:

foo = class_foo()

NameError: name 'class_foo' is not defined
Run Code Online (Sandbox Code Playgroud)

显然,我做错了什么.任何帮助,将不胜感激.

python

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

PEP-8:文件顶部的模块

为了改善我的Python风格,我在我的一个脚本上运行了一个PEP-8样式检查器,它抱怨我不知道如何修复.脚本的序言如下:

#! /bin/env python3

import sys
import os

exe_name = os.path.basename(os.path.realpath(__file__))
bin_dir = os.path.dirname(os.path.realpath(__file__))
inst_dir = os.path.dirname(bin_dir)
sys.path.insert(0, inst_dir+'/path/to/packages')

import mypackage.mymodule
Run Code Online (Sandbox Code Playgroud)

并且样式检查器在线上抱怨import mymodule,声明它应该是文件的顶部.但在设置找到它的路径之前,我显然无法移动它.有没有一种很好的方法来实现这一点(强制要求环境变量或shell包装器不是我认为比现有代码更好的)同时尊重PEP-8建议?

python pep8

8
推荐指数
1
解决办法
886
查看次数