相关疑难解决方法(0)

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

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

python configuration python-module python-import

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

相对进口数十亿次

我来过这里:

还有很多我没有复制的网址,有些在SO上,有些在其他网站上,当我认为我有快速解决方案的时候.

永远反复出现的问题是:使用Windows 7,32位Python 2.7.3,如何解决这个"非包装中尝试相对导入"的消息?我在pep-0328上构建了一个包的精确副本:

package/
    __init__.py
    subpackage1/
        __init__.py
        moduleX.py
        moduleY.py
    subpackage2/
        __init__.py
        moduleZ.py
    moduleA.py
Run Code Online (Sandbox Code Playgroud)

我确实在适当的模块中创建了名为spam和eggs的函数.当然,它没有用.答案显然在我列出的第4个网址中,但这对我来说都是校友.我访问过的其中一个网址上有此回复:

相对导入使用模块的name属性来确定模块在包层次结构中的位置.如果模块的名称不包含任何包信息(例如,它设置为'main'),则解析相对导入,就像模块是顶级模块一样,无论模块实际位于文件系统的哪个位置.

上面的反应看起来很有希望,但它对我来说都是象形文字.所以我的问题是,如何让Python不回归"尝试非包装中的相对导入"?有一个答案涉及-m,据说.

有人可以告诉我为什么Python会给出错误信息,非包装意味着什么!,为什么以及如何定义"包裹",并且准确的答案足以让幼儿园儿童理解.

编辑:导入是从控制台完成的.

python import relative-path python-2.7

564
推荐指数
8
解决办法
17万
查看次数

大多数Pythonic方式在config.py中提供全局配置变量?

在我过于复杂的简单内容的无尽追求中,我正在研究最"Pythonic"的方式,在Python egg包中的典型' config.py '中提供全局配置变量.

传统方式(aah,good ol'#define!)如下:

MYSQL_PORT = 3306
MYSQL_DATABASE = 'mydb'
MYSQL_DATABASE_TABLES = ['tb_users', 'tb_groups']
Run Code Online (Sandbox Code Playgroud)

因此,全局变量以下列方式之一导入:

from config import *
dbname = MYSQL_DATABASE
for table in MYSQL_DATABASE_TABLES:
    print table
Run Code Online (Sandbox Code Playgroud)

要么:

import config
dbname = config.MYSQL_DATABASE
assert(isinstance(config.MYSQL_PORT, int))
Run Code Online (Sandbox Code Playgroud)

这是有道理的,但有时可能有点混乱,特别是当你试图记住某些变量的名称时.此外,提供了一个"配置"对象,用变量的属性,可能会更加灵活.所以,从bpython config.py文件中取得领先,我想出了:

class Struct(object):

    def __init__(self, *args):
        self.__header__ = str(args[0]) if args else None

    def __repr__(self):
        if self.__header__ is None:
             return super(Struct, self).__repr__()
        return self.__header__

    def next(self):
        """ Fake iteration functionality.
        """
        raise StopIteration

    def …
Run Code Online (Sandbox Code Playgroud)

python config egg global-variables

81
推荐指数
8
解决办法
7万
查看次数

Python配置文件:任何文件格式推荐?INI格式还合适吗?看起来很老派

我需要存储Python应用程序的配置(键/值),我正在寻找将这些配置存储在文件中的最佳方法.

我遇到Python的ConfigParser,我想知道INI文件格式现在是否真的合适?!是否存在更新的格式或INI仍然是推荐的方式?(XML,JSON,...)

请分享您的意见/建议......

python

61
推荐指数
6
解决办法
4万
查看次数

如何使用python读取配置文件

我有一个配置文件abc.txt,看起来有点像:

path1 = "D:\test1\first"
path2 = "D:\test2\second"
path3 = "D:\test2\third"
Run Code Online (Sandbox Code Playgroud)

我想从abc.txt我的程序中读取这些路径以避免硬编码.

python

42
推荐指数
4
解决办法
9万
查看次数

Python/Django - 避免在源代码中保存密码

我使用Python和Django来创建我们存储在源代码控制中的Web应用程序.通常设置Django的方式,密码在settings.py文件中以纯文本形式显示.

以纯文本格式存储我的密码会让我遇到许多安全问题,特别是因为这是一个开源项目,我的源代码将受版本控制(通过git,在Github上,供整个世界查看!)

问题是,在Django/Python开发环境中安全地编写settings.py文件的最佳做法是什么?

python security django version-control django-settings

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

Python:使用"点符号"访问YAML值

我正在使用YAML配置文件.所以这是在Python中加载我的配置的代码:

import os
import yaml
with open('./config.yml') as file:
    config = yaml.safe_load(file)
Run Code Online (Sandbox Code Playgroud)

此代码实际上创建了一个字典.现在的问题是,为了访问值,我需要使用大量的括号.

YAML:

mysql:
    user:
        pass: secret
Run Code Online (Sandbox Code Playgroud)

蟒蛇:

import os
import yaml
with open('./config.yml') as file:
    config = yaml.safe_load(file)
print(config['mysql']['user']['pass']) # <--
Run Code Online (Sandbox Code Playgroud)

我更喜欢这样的东西(点符号):

config('mysql.user.pass')
Run Code Online (Sandbox Code Playgroud)

所以,我的想法是利用PyStache render()接口.

import os
import yaml
with open('./config.yml') as file:
    config = yaml.safe_load(file)

import pystache
def get_config_value( yml_path, config ):
    return pystache.render('{{' + yml_path + '}}', config)

get_config_value('mysql.user.pass', config)
Run Code Online (Sandbox Code Playgroud)

这会是一个"好"的解决方案吗?如果没有,什么是更好的选择?

附加问题[已解决]

我决定使用IljaEverilä的解决方案.但现在我还有一个问题:你如何在DotConf周围创建一个包装器Config类?

以下代码不起作用,但我希望您了解我正在尝试做的事情:

class Config( DotDict ):
    def __init__( self ):
        with open('./config.yml') as file: …
Run Code Online (Sandbox Code Playgroud)

python yaml python-3.x

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

如何在配置文件中保存应用程序设置?

我正在开发一个程序,它有一个设置窗口,我可以在其中更改程序的各种参数.在某种配置文件中读取/保存它们的最佳方法是什么?我知道有些软件和游戏使用.ini文件或类似系统.我怎样才能在Python中实现这一目标?

python settings ini app-config

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

Python 中的配置类

在面向对象编程中使用配置的pythonic方法是什么?

我想到了以下2个设置:

class Main():
    def __init__(self):
        self.config = ConfigClass("config_file.cfg")
        self.worker = WorkerClass(self.config.USER_NAME)
        self.worker2 = WorkerClass2(self.config)

    def run(self):
        self.worker.work()
        self.worker2.work()

class ConfigClass():
    def __init__(self, file_name):
        self.config = ConfigParser.ConfigParser()
        self.config.read(file_name)

    @property
    def USER_NAME(self):
        return self.config.get("USER", "NAME")

class WorkerClass():
    def __init__(self, user_name):
        self.user = user_name

    def work(self):
        print(self.user)

class WorkerClass2():
    def __init__(self, config):
        self.config = config
        self.user = self.config.USER_NAME

    def work(self):
        print(self.user)
Run Code Online (Sandbox Code Playgroud)

是首选传递配置对象还是仅传递所需的字符串,还是有更好的不同方法我没有提到?

提前致谢。

python oop configuration class

7
推荐指数
1
解决办法
3598
查看次数

Flask-Admin基于角色的访问 - 根据角色修改访问权限

我从这里获取了Flask-Admin auth示例并略微更改了它.

我在下面的视图中添加了以下块,但它没有显示导出按钮.我期待它将导出选项添加到管理视图.它会打印---superuser到控制台.

        if current_user.has_role('superuser'):
            can_export = True
            print ' ---- superuser '
Run Code Online (Sandbox Code Playgroud)

我以前多次使用导出功能.如果我把声明放在can_export = True下面,class MyModelView(sqla.ModelView):我将使用它作为控制基于用户角色创建/编辑/ etc的访问的示例.例如,我想要一个只读的角色,其中can_create = False,can_edit = False等.

有人可以帮忙吗?有人能告诉我我做错了什么吗?

==

这是整个视图.

# Create customized model view class
class MyModelView(sqla.ModelView):

    def is_accessible(self):
        if not current_user.is_active or not current_user.is_authenticated:
            return False

        if current_user.has_role('superuser'):
            return True

        return False

    def _handle_view(self, name, **kwargs):
        """
        Override builtin _handle_view in order to redirect users when a view is not accessible.
        """
        if current_user.has_role('superuser'):
            can_export …
Run Code Online (Sandbox Code Playgroud)

python flask flask-admin

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

在 Python 中设置配置文件的最佳方法是什么

我意识到之前有人问过这个问题(在 Python 中使用设置文件的最佳实践是什么?)但是看到 7 年前有人问过这个问题,我觉得有必要再次讨论一下技术是如何发展的。

我有一个 python 项目,需要根据环境变量的值使用不同的配置。由于使用环境变量来选择配置文件很简单,我的问题如下:

当基于环境需要多个配置时,在python中设置配置文件的最佳实践是什么格式?

我意识到 python 带有一个 ConfigParser 模块,但我想知道使用 YAML 或 JSON 等格式是否更好,因为它们易于跨语言使用而越来越受欢迎。当您有多个配置时,哪种格式更容易维护?

python configuration json yaml

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

将 YAML 加载为嵌套对象而不是 Python 中的字典

我在 YAML 中有一个配置文件,当前使用 yaml.safe_load 作为字典加载。为了方便编写我的代码,我更愿意将它作为一组嵌套对象加载。引用字典的更深层次很麻烦,并且使代码更难阅读。

例子:

import yaml
mydict = yaml.safe_load("""
a: 1
b:
- q: "foo"
  r: 99
  s: 98
- x: "bar"
  y: 97
  z: 96
c:
  d: 7
  e: 8
  f: [9,10,11]
""")
Run Code Online (Sandbox Code Playgroud)

目前,我访问诸如

mydict["b"][0]["r"]
>>> 99
Run Code Online (Sandbox Code Playgroud)

我希望能够做的是访问相同的信息,如

mydict.b[0].r
>>> 99
Run Code Online (Sandbox Code Playgroud)

有没有办法像这样将 YAML 加载为嵌套对象?或者我是否必须滚动自己的类并递归地将这些字典翻转为嵌套对象?我猜namedtuple可以让这更容易一些,但我更喜欢整个事情的现成解决方案。

python yaml

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