首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PEP-8:文件顶部的模块

PEP-8:文件顶部的模块
EN

Stack Overflow用户
提问于 2017-04-03 23:41:16
回答 3查看 2.1K关注 0票数 8

为了改进我的Python风格,我在我的一个脚本上运行了一个PEP-8样式检查器,它抱怨一些我不知道如何修复的东西。脚本的开场白类似于:

代码语言:javascript
复制
#! /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

样式检查器在import mymodule行上抱怨,声明它应该是文件的顶部。但很明显,在设置找到它的路径之前,我不能移动它。有没有一个很好的方法来实现这一点(我发现强制环境变量或shell包装器并不比我当前的代码更好),同时又遵守PEP-8建议?

EN

回答 3

Stack Overflow用户

发布于 2017-04-09 02:02:48

如果您希望避免路径操作,可以使用不为人所知的.pth功能来实现。

sys.path应该从包含主程序的目录开始,无论是通过名称还是通过引用'‘。我假设导入mymodule的文件不是mypackage的一部分,因此'‘条目对于导入mymodule没有什么用处。

sys.path应该以执行二进制文件的site-packages目录结束。这是添加包的正常位置。如果你不想把mypackage移到site-packages中,你可以通过在里面放一个mystuff.pth文件来“虚拟地”扩展后者。它应该包含一行:包含mypackage的目录的路径。叫它myprojects吧。然后,可以像在site-packages中一样导入mypackagemyprojects中的任何其他包。

.pth文件的一个优点是您可以将相同的副本放在多个站点包目录中。例如,我在F:/python中有多个项目。我安装了多个版本的Python。因此,我将包含这一行的python.pth放在了站点包中。

票数 2
EN

Stack Overflow用户

发布于 2017-04-03 23:52:46

最好的策略是将sys.path相关代码放在单独的文件中,并将其导入到工作代码文件中。

所以,我将把上面的代码分成两个文件。一个名为my_module.py,另一个名为working_module.py

现在,my_module将包含以下行

代码语言:javascript
复制
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')

working_module将包含

代码语言:javascript
复制
import my_module
import mypackage.mymodule

因为我们在导入mypackage之前导入了my_module,所以它将在前面执行与路径相关的代码,您的包将在path中可用。

票数 0
EN

Stack Overflow用户

发布于 2017-04-04 01:08:16

您可以使用importlib模块(Python3.5)或Python2.7的imp来编程加载mypackage.mymodule。两者都有相同的用途:

用于实现导入语句的

机制

这个问题可能对你更有帮助:How to import a module given the full path?

https://docs.python.org/3/library/importlib.html#examples

https://docs.python.org/2/library/imp.html

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43188843

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档