考虑到模块的名称,如何测试是否安装了一组模块.例如
modules = set(["sys", "os", "jinja"])
for module in modules:
# if test(module exists):
# do something
Run Code Online (Sandbox Code Playgroud)
虽然可以将测试写成:
try:
import sys
except ImportError:
print "No sys!"
Run Code Online (Sandbox Code Playgroud)
这对我正在做的事情来说有点麻烦.有没有动态的方法来做到这一点?
我已经尝试了eval("import%s"%module),但是抱怨编译错误.
我很感谢你的想法和建议.谢谢.
我正在尝试创建一个包含几个类的包 (mypackage),但希望这些类包含在多个文件中。
例如,我希望 class_a.py 包含一个名为 ClassA 的类,等等...
因此,我想要以下文件结构:
.../mypackage
__init__.py
class_a.py
class_b.py
...
Run Code Online (Sandbox Code Playgroud)
但是,我想按如下方式加载和使用该包:
load mypackage
a = mypackage.ClassA()
Run Code Online (Sandbox Code Playgroud)
我需要做什么(我在 __init__.py 中假设)文件才能使这成为可能。目前,它使用“mypackage.class_a.ClassA()”运行?
借用http://pythoncentral.io/how-to-create-a-python-package/上的简化示例
我有一个类似的文件结构如下,其中Mammals.py和Birds.py定义具有相同名称的类:
Project/
Animals/
__init__.py
Mammals.py
Birds.py
Run Code Online (Sandbox Code Playgroud)
在Project/目录中运行ipython解释器并且__init__.py为空时,以下工作:
from Animals.Mammals import Mammals
x = Mammals()
x.printMammals()
Run Code Online (Sandbox Code Playgroud)
我希望能够写from Animals import Mammals而不是from Animals.Mammals import Mammals.我相信这样做的方法是使__init__.py文件内容如下:
from Mammals import Mammals
from Birds import Birds
Run Code Online (Sandbox Code Playgroud)
但是,完成此操作后,从类似的Project/源ipython解释器中,以下输入会产生错误:
In [1]: from Animals import Mammals
---------------------------------------------------------------------------
ImportError Traceback (most recent call last)
<ipython-input-1-6d651848af9b> in <module>()
----> 1 from Animals import Mammals
/Users/username/Project/Animals/__init__.py in <module>()
----> 1 from Mammals import Mammals
2 from Birds …Run Code Online (Sandbox Code Playgroud) 假设我写了morning.py一个执行简单打印语句的脚本
# morning.py
print 'Good morning'
Run Code Online (Sandbox Code Playgroud)
几个小时后,我意识到我必须在另一个名为evening.py. 我知道有两种选择。首先,morning.py作为子进程调用
# evening.py
import subprocess
import shlex
process = subprocess.Popen(shlex.split('python morning.py'))
process.communicate()
Run Code Online (Sandbox Code Playgroud)
这是我最初选择的方式。问题是我想将我的程序 ( morning+ evening)打包成一个可执行文件。据我所知,从 exe 文件中这样的调用是行不通的。
另一种选择是将模块morning变成一个函数。例如,像这样
# morning.py
def morning_func():
print 'Good morning'
Run Code Online (Sandbox Code Playgroud)
然后我可以简单地从evening模块调用这个函数
# evening
import morning
morning.morning_func()
Run Code Online (Sandbox Code Playgroud)
这里的问题是,与morning我实际的初始脚本不同,它非常扩展和混乱。我无法执行单个函数来模拟脚本运行流程。将整个脚本包装在一个函数中感觉不对。
有哪些可能的解决方案?
是否可以将所有python模块从一台Windows计算机复制到另一台计算机?它们都运行相同版本的Python 2.7.12。
这样做的原因是我可以在其中一个上访问Internet,而在另一个上手动安装模块则由于依赖而需要大量时间。
似乎使用两个不同的PYTHONPATHs 导入的实体不是相同的对象.
我在我的代码中遇到了一个小问题,我想用一个小例子来解释它.
我创建了源代码树:
a/
__init__.py
b/
__init__.py
example.py
Run Code Online (Sandbox Code Playgroud)
在example.py中:
class Example:
pass
Run Code Online (Sandbox Code Playgroud)
从文件夹的父级a,我运行python和这个测试:
>>> import sys
>>> sys.path.append("/home/marco/temp/a")
>>>
>>> import a.b.example as example1
>>> import b.example as example2
>>>
>>> example1.Example is example2.Example
False
Run Code Online (Sandbox Code Playgroud)
所以问题是:结果为什么False?即使通过两个不同的路径导入,该类也是相同的.如果类是自定义异常并且您尝试捕获它,那么这是一个完全混乱except.
用python 3.4.3测试
我希望下面的问题不会太长。但除此之外,我无法通过问题和我想要的来解释:
从如何使用 importlib 从任意来源导入模块中学习?(我昨天的问题)我为新文件类型 (.xxx) 编写了一个特定的加载程序。(实际上 xxx 是 pyc 的加密版本,以防止代码被盗)。
我只想为新文件类型“xxx”添加一个导入挂钩,而不会以任何方式影响其他类型(.py、.pyc、.pyd)。
现在,加载器是ModuleLoader,继承自mportlib.machinery.SourcelessFileLoader.
使用sys.path_hooksloader 应添加一个钩子:
myFinder = importlib.machinery.FileFinder
loader_details = (ModuleLoader, ['.xxx'])
sys.path_hooks.append(myFinder.path_hook(loader_details))
Run Code Online (Sandbox Code Playgroud)
注意:这是通过调用激活一次 modloader.activateLoader()
加载名为test(这是一个test.xxx)的模块后,我得到:
myFinder = importlib.machinery.FileFinder
loader_details = (ModuleLoader, ['.xxx'])
sys.path_hooks.append(myFinder.path_hook(loader_details))
Run Code Online (Sandbox Code Playgroud)
但是,当我sys.path_hooks在添加钩子之前删除内容时:
sys.path_hooks = []
sys.path.insert(0, '.') # current directory
sys.path_hooks.append(myFinder.path_hook(loader_details))
Run Code Online (Sandbox Code Playgroud)
有用:
>>> modloader.activateLoader()
>>> import test
using xxx class
in xxxLoader exec_module
in xxxLoader get_code: .\test.xxx
ANALYZING ...
GENERATE …Run Code Online (Sandbox Code Playgroud) 我在 Cloud9 中使用 Python AWS CDK,我正在部署一个简单的 Lambda 函数,当对象上传到 S3 存储桶(也由 CDK 创建)时,该函数应该向 Atlassian 的 API发送 API 请求。这是我的 CDK 堆栈代码:
from aws_cdk import core
from aws_cdk import aws_s3
from aws_cdk import aws_lambda
from aws_cdk.aws_lambda_event_sources import S3EventSource
class JiraPythonStack(core.Stack):
def __init__(self, scope: core.Construct, id: str, **kwargs) -> None:
super().__init__(scope, id, **kwargs)
# The code that defines your stack goes here
jira_bucket = aws_s3.Bucket(self,
"JiraBucket",
encryption=aws_s3.BucketEncryption.KMS)
event_lambda = aws_lambda.Function(
self,
"JiraFileLambda",
code=aws_lambda.Code.asset("lambda"),
handler='JiraFileLambda.handler',
runtime=aws_lambda.Runtime.PYTHON_3_6,
function_name="JiraPythonFromCDK") …Run Code Online (Sandbox Code Playgroud) 我正在学习如何使用 Azure 函数并在其中使用我的网页抓取脚本。
它使用 BeautifulSoup (bs4) 和 pymysql 模块。
当我按照 MS 指南在虚拟环境中本地尝试时,它工作正常:
但是,当我创建函数 App 并向其发布脚本时,Azure Functions 日志给出以下错误:
Failure Exception: ModuleNotFoundError: No module named 'pymysql'。
尝试导入它时一定会发生这种情况。
我真的不知道如何继续,我应该在哪里指定需要安装哪些模块?
python python-module azure azure-functions azure-function-app
假设我正在编写一个自定义 PIP 包,其结构如下:
\n.\n| setup.py\n\xe2\x94\x82\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80 src\n| | __init__.py\n| | useful_functions_i.py\n| | useful_functions_ii.py\n| | useful_strings.py\n|\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80 tests\n | unit_tests.py\n\nRun Code Online (Sandbox Code Playgroud)\n假设useful_strings看起来像这样:
.\n| setup.py\n\xe2\x94\x82\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80 src\n| | __init__.py\n| | useful_functions_i.py\n| | useful_functions_ii.py\n| | useful_strings.py\n|\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80 tests\n | unit_tests.py\n\nRun Code Online (Sandbox Code Playgroud)\n并且useful_functions_i和useful_functions_ii包含执行以下操作的函数:
USEFUL_STRING_A = "useful-string-a"\nUSEFUL_STRING_B = "useful-string-b"\n...\nRun Code Online (Sandbox Code Playgroud)\n我应该如何导入useful_stringsand ?useful_functions_iuseful_functions_ii(这并不是一个看起来那么简单的问题。)
如果我使用:
\ndef a_useful_function(a_string):\n if a_string == useful_strings.USEFUL_STRING_XYZ:\n return True\n return False\nRun Code Online (Sandbox Code Playgroud)\nsrc如果我尝试在本地运行一些代码,那么效果会很好;pip install .如果我运行并尝试将代码库用作 …
python-module ×10
python ×9
aws-cdk ×1
aws-lambda ×1
azure ×1
import ×1
init ×1
module ×1
packages ×1
pytest ×1
python-2.7 ×1
python-3.4 ×1
reflection ×1
windows ×1