首先,我需要描述我写作的环境。我正在编写Python代码,该代码将由在CAD应用程序内运行的Python运行时加载和执行。CAD应用程序使用Python作为其脚本引擎。因此,我无法访问Python运行时,并且作为对所有其他脚本的良好公民,不应修改任何系统设置。我的脚本只是加载和运行的众多脚本之一。
这一切都很好,除非我想要使用非标准库。在这种情况下,我需要安装库的本地副本,以便我的脚本可以访问它。我遇到的问题是,大多数库希望被安装并添加到sys路径中,而我不应这样做,因为这可能会与其他脚本所做的操作产生冲突。相反,我尝试设置库的本地副本,然后编辑其源代码,使其导入是相对的,而不是依赖于sys路径。这样,我的程序将拥有自己的本地库副本,不依赖于其他内容,并且不会干扰其他脚本。
我使用PIP的-t选项将Requests和PyOpenSSL安装到我的脚本文件夹的“Packages”子文件夹中。以下是我拥有的内容的简略列表。
我在第一行代码处遇到了"ImportError: No module named 'OpenSSL'"的错误,第二行代码处遇到了"ImportError: No module named 'cryptography'"的错误。我相当确定路径是正确的,因为如果我改变点的数量,我会得到没有模块命名错误,但它会列出正在尝试加载的内容的完整路径,而不仅仅是模块的名称。
我需要针对这个具体问题的帮助,也可以使用一些关于如何设置和使用私有库的整体建议。请记住,我的程序只是系统正在加载的众多程序之一,更改系统或设置虚拟环境都不是选项。
这一切都很好,除非我想要使用非标准库。在这种情况下,我需要安装库的本地副本,以便我的脚本可以访问它。我遇到的问题是,大多数库希望被安装并添加到sys路径中,而我不应这样做,因为这可能会与其他脚本所做的操作产生冲突。相反,我尝试设置库的本地副本,然后编辑其源代码,使其导入是相对的,而不是依赖于sys路径。这样,我的程序将拥有自己的本地库副本,不依赖于其他内容,并且不会干扰其他脚本。
我使用PIP的-t选项将Requests和PyOpenSSL安装到我的脚本文件夹的“Packages”子文件夹中。以下是我拥有的内容的简略列表。
RequestsTest/
RequestsTest.py
Packages/
OpenSSL/
cryptography/
x509/
__init__.py
base.py
hazmat/
__init__.py
backends/
__init__.py
interfaces.py
openssl/
__init__.py
backend.py
x509.py
OpenSSL/
__init__.py
SSL.py
Requests/
chardet/
__init__.py
requests/
__init__.py
urllib3/
__init__.py
request.py
contrib/
__init__.py
pyopenssl.py
util/
__init__.py
request.py
ssl_.py
虽然追踪各种导入语句并将它们变成相对路径很繁琐,但似乎确实有效。然而,我在处理一个特定的导入集时遇到了问题。
在Packages/Requests/urllib3/contrib/pyopenssl.py中,它包含以下导入语句,我已经进行了修改:
from ....OpenSSL.OpenSSL import SSL
from ....OpenSSL.cryptography import x509
他们最初是这样的:
from OpenSSL import OpenSSL.SSL
from cryptography import x509
我在第一行代码处遇到了"ImportError: No module named 'OpenSSL'"的错误,第二行代码处遇到了"ImportError: No module named 'cryptography'"的错误。我相当确定路径是正确的,因为如果我改变点的数量,我会得到没有模块命名错误,但它会列出正在尝试加载的内容的完整路径,而不仅仅是模块的名称。
我需要针对这个具体问题的帮助,也可以使用一些关于如何设置和使用私有库的整体建议。请记住,我的程序只是系统正在加载的众多程序之一,更改系统或设置虚拟环境都不是选项。