相关疑难解决方法(0)

给定完整路径如何导入模块?

如何在完整路径下加载Python模块?请注意,该文件可以位于文件系统中的任何位置,因为它是一个配置选项.

python configuration python-module python-import

1022
推荐指数
18
解决办法
80万
查看次数

从相对路径导入模块

如何根据相对路径导入Python模块?

例如,如果dirFoo包含Foo.pydirBar,和dirBar包含Bar.py,我怎么导入Bar.pyFoo.py

这是一个直观的表示:

dirFoo\
    Foo.py
    dirBar\
        Bar.py
Run Code Online (Sandbox Code Playgroud)

Foo希望包括Bar,但重组文件夹层次结构不是一种选择.

python relative-path python-import

749
推荐指数
16
解决办法
88万
查看次数

如何忽略Python中的弃用警告

我一直这样:

DeprecationWarning: integer argument expected, got float
Run Code Online (Sandbox Code Playgroud)

如何让这条消息消失?有没有办法避免Python中的警告?

python warnings ignore deprecated

151
推荐指数
10
解决办法
14万
查看次数

导入没有.py扩展名的python模块

我有一个名为foobar的文件(没有.py扩展名).在同一目录中,我有另一个试图导入它的python文件:

import foobar
Run Code Online (Sandbox Code Playgroud)

但这只有在我将文件重命名为foobar.py时才有效.是否可以导入没有.py扩展名的python模块?

更新:该文件没有扩展名,因为我也将它用作独立脚本,我不想输入.py扩展名来运行它.

Update2:我将选择下面提到的符号链接解决方案.

python import

61
推荐指数
5
解决办法
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 - Json

参考这个问题,我有一个类似但不一样的问题..

在我的路上,我将有一些文本文件,结构如下:

var_a: 'home'
var_b: 'car'
var_c: 15.5
Run Code Online (Sandbox Code Playgroud)

我需要python读取文件,然后创建一个名为var_a的变量,其值为'home',依此类推.

例:

#python stuff over here
getVarFromFile(filename) #this is the function that im looking for
print var_b
#output: car, as string
print var_c
#output 15.5, as number.
Run Code Online (Sandbox Code Playgroud)

这是否可能,我的意思是,即使保留var类型?

请注意,我对文本文件结构有完全的自由,如果我提议的那个不是最好的,我可以使用我喜欢的格式.

编辑:ConfigParser可以是一个解决方案,但我不喜欢它,因为在我的脚本中我将有时参考文件中的变量

config.get("set", "var_name")
Run Code Online (Sandbox Code Playgroud)

但我喜欢的是直接引用变量,就像我在python脚本中声明的那样......

有一种方法可以将文件导入为python字典吗?

哦,最后一点,请记住,我不确切知道文本文件中有多少变量.

编辑2:我对stephan的JSON解决方案非常感兴趣,因为通过这种方式,可以使用其他语言(PHP,然后通过AJAX JavaScript)简单地读取文本文件,但是在执行该解决方案时我失败了:

#for the example, i dont load the file but create a var with the supposed file content
file_content = "'var_a': 4, 'var_b': 'a string'"
mydict = dict(file_content)
#Error: ValueError: dictionary update …
Run Code Online (Sandbox Code Playgroud)

python variables text-files

38
推荐指数
6
解决办法
12万
查看次数

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万
查看次数

不推荐使用imp模块

每当我尝试在pycharm中使用"sklearn"时,我在控制台上收到以下错误.

DeprecationWarning:不推荐使用imp模块,而是使用importlib; 请参阅模块的文档以了解替代用途import imp

我不确定它是否应该打扰我,因为程序仍在工作,但它很烦人.我怎么能摆脱它?

我做了一切改变,人们在链接问题中推荐,但错误仍然存​​在.

谢谢

python pycharm scikit-learn

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

如何为bin目录中的脚本编写Python单元测试

Python unittest模块似乎假设一个项目的目录结构,其中有一个项目根级目录,其中包含源代码和该目录下的测试.

但是,我想在我的~/bin目录中编写Python脚本并在另一个目录中测试它(比方说~/dev/tests).有没有办法让我使用命令行界面运行单元测试,而无需设置我的PYTHONPATH环境变量和创建__init__.py文件等等?

这是一个展示我想要的简单例子:

~/bin/candy:

#!/usr/bin/env python

def candy():
    return "candy"

if __name__ == '__main__':
    print candy()
Run Code Online (Sandbox Code Playgroud)

~/dev/tests/test_candy.py:

#!/usr/bin/env python

import unittest
import candy

class CandyTestCase(unittest.TestCase):

    def testCandy(self):
        candyOutput = candy.candy()

        assert candyOutput == "candy"
Run Code Online (Sandbox Code Playgroud)

我注意到如果出现以下情况,可以很方便

  • 这两个文件以py扩展名命名(candy.pytest_candy.py)
  • 这两个文件位于同一目录中
  • 测试目录中运行以下测试:$ python -m unittest test_candy

我可以使用unittest模块运行python 来执行以下操作,而无需在我的环境中明确设置任何内容:

  • 我正在测试的文件没有py扩展名(只是~/candy).
  • 我不在乎是否test_candy有py作为扩展名.
  • 我想要candytest_candy.py不共享一个共同的根(我的主目录除外).

如果通过简单的调用python -m unittest无法做到这一点,那么实现这一目标的最简单方法是什么?

python unit-testing python-unittest

8
推荐指数
3
解决办法
1767
查看次数

如何将目录导入为python模块

如果有目录/home/project/aaa。我知道它是一个 Python 包。

那么,我如何通过知道它的路径来导入这个模块。

意味着,我希望代码有效:

aaa = load_module("/home/project/aaa")
Run Code Online (Sandbox Code Playgroud)

我知道的唯一方法是,添加/home/projectsys.path

但它可能会引起一些问题:

如果我添加/home/projectsys.path

如果pytest路径中有一个目录/home/project

那么官方的 pytest 包将不起作用。

我试试吧importlib。但似乎importlib只能将文件作为模块导入,而不是路径。

所以,我试试看:

aaa = importlib.import_module("aaa", "/home/project")
Run Code Online (Sandbox Code Playgroud)

或者

aaa = importlib.import_module("aaa", "/home/project/aaa")
Run Code Online (Sandbox Code Playgroud)

他们两个都不工作。

那么,有没有其他方法可以做我想做的事?

哦,我正在使用 Python3.6


更新于 20170628

(注意:有一个__init__.pyin 文件夹/home/project/aaa

我知道的所有解决方案都是从单个文件导入模块。

如果bbb.py文件夹中有文件/home/project/aaa

然后,添加/home/project/aaasys.path__path__(无论如何)

import bbb 工作,但不是 import aaa

我想问的是如何将文件夹(或目录)作为模块导入。

对于我的示例,文件夹aaa被视为一个模块。

我想用import aaa …

python python-import python-3.x

4
推荐指数
1
解决办法
5123
查看次数

Python导入:导入没有.py扩展名的模块?

在我开发的Python系统中,我们通常有这个模块结构.

mymodule/
mymodule/mymodule/feature.py
mymodule/test/feature.py
Run Code Online (Sandbox Code Playgroud)

这允许我们的小测试框架轻松导入test/feature.py并运行单元测试.但是,我们现在需要一些shell脚本(用Python编写):

mymodule/
mymodule/scripts/yetanotherfeature.py
mymodule/test/yetanotherfeature.py
Run Code Online (Sandbox Code Playgroud)

yetanotherfeature.py由模块Debian软件包安装到/ usr/bin中.但我们显然不希望扩展.py扩展.所以,为了使测试框架仍然能够导入模块,我必须做这个符号链接的东西:

mymodule/
mymodule/scripts/yetanotherfeature
mymodule/scripts/yetanotherfeature.py @ -> mymodule/scripts/yetanotherfeature
mymodule/test/yetanotherfeature.py
Run Code Online (Sandbox Code Playgroud)

是否可以在Python中通过文件名导入模块,或者您能想到更优雅的解决方案吗?

python debian

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