Python 包内的导入在 python3 中不起作用
Imports inside Python package don't work in python3
我是编写 python 包的新手,并试图弄清楚包内的导入在 Python2 和 Python3.
中是如何工作的
我的包的结构是:
LICENSE
README.md
setup.py
FirstPythonPackage
__init__.py
data.json
module_a.py
module_b.py
setup.py:
import setuptools
with open("README.md", "r") as fh:
long_description = fh.read()
setuptools.setup(
name="FirstPythonPackage",
version="1.0.2",
author="jirikadlec2",
author_email="jirikadlec2@example.com",
description="my first python package",
long_description=long_description,
long_description_content_type="text/markdown",
url="https://github.com/jirikadlec2/first-python-package",
packages=setuptools.find_packages(),
install_requires=["numpy"],
package_data={"FirstPythonPackage": ["data.json"]},
classifiers=[
"Development Status :: 3 - Alpha"
],
)
FirstPythonPackage/module_b.py:
import numpy as np
def run_helper(options):
my_data = np.array([[1, 2],[2, 1]])
my_result = my_data * 2
print("module_b, run_helper completed with options: " + options)
return my_result
FirstPythonPackage/module_a.py:
import module_b
def do_stuff():
final_result = module_b.run_helper("default_options")
if final_result:
print("module_a, do_stuff completed successfully!")
else:
print("module_a, error calculating result!")
我已经为我的包创建了一个 GitHub 存储库:https://github.com/jirikadlec2/first-python-package
接下来,我尝试在 Python2 和 Python3 虚拟环境中安装和 运行 我的包。我的操作系统是 Ubuntu Linux 16.04.
在Python2虚拟环境中安装(成功):
virtualenv -p python2 env2
source env2/bin/activate
(env2) pip install git+https://github.com/jirikadlec2/first-python-package
运行 Python2虚拟环境中的包(成功):
source env2/bin/activate
(env2) python
Python 2.7.12 (default, Nov 12 2018, 14:36:49)
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from FirstPythonPackage import module_a
>>> module_a.do_stuff()
module_b, run_helper completed with options: default_options
module_a, do_stuff completed successfully!
正在Python3虚拟环境中安装我的包(成功):
virtualenv -p python3 env3
source env3/bin/activate
(env3) pip install git+https://github.com/jirikadlec2/first-python-package
运行 我在 Python3 虚拟环境中的包由于导入错误而失败:
(env3) python3
Python 3.5.2 (default, Nov 12 2018, 13:43:14)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from FirstPythonPackage import module_a
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/jiri/github/package_test/env3/lib/python3.5/site-packages /FirstPythonPackage/module_a.py", line 1, in <module>
import module_b
ImportError: No module named 'module_b'
我不明白导入错误的原因。 module_b
似乎已正确安装在包中,声明:from FirstPythonPackage import module_b
没有给我任何错误。我做错了什么以及使我的包中的导入在 Python2 和 Python3 中工作的正确方法是什么?
您可能会遇到 。
兼容的方式就是
from FirstPythonPackage import module_b
或(例如)
import FirstPythonPackage.module_b as mb
或
import .module_b as mb
即使在您的包裹中 Python 2 和 3。
我是编写 python 包的新手,并试图弄清楚包内的导入在 Python2 和 Python3.
中是如何工作的我的包的结构是:
LICENSE
README.md
setup.py
FirstPythonPackage
__init__.py
data.json
module_a.py
module_b.py
setup.py:
import setuptools
with open("README.md", "r") as fh:
long_description = fh.read()
setuptools.setup(
name="FirstPythonPackage",
version="1.0.2",
author="jirikadlec2",
author_email="jirikadlec2@example.com",
description="my first python package",
long_description=long_description,
long_description_content_type="text/markdown",
url="https://github.com/jirikadlec2/first-python-package",
packages=setuptools.find_packages(),
install_requires=["numpy"],
package_data={"FirstPythonPackage": ["data.json"]},
classifiers=[
"Development Status :: 3 - Alpha"
],
)
FirstPythonPackage/module_b.py:
import numpy as np
def run_helper(options):
my_data = np.array([[1, 2],[2, 1]])
my_result = my_data * 2
print("module_b, run_helper completed with options: " + options)
return my_result
FirstPythonPackage/module_a.py:
import module_b
def do_stuff():
final_result = module_b.run_helper("default_options")
if final_result:
print("module_a, do_stuff completed successfully!")
else:
print("module_a, error calculating result!")
我已经为我的包创建了一个 GitHub 存储库:https://github.com/jirikadlec2/first-python-package
接下来,我尝试在 Python2 和 Python3 虚拟环境中安装和 运行 我的包。我的操作系统是 Ubuntu Linux 16.04.
在Python2虚拟环境中安装(成功):
virtualenv -p python2 env2
source env2/bin/activate
(env2) pip install git+https://github.com/jirikadlec2/first-python-package
运行 Python2虚拟环境中的包(成功):
source env2/bin/activate
(env2) python
Python 2.7.12 (default, Nov 12 2018, 14:36:49)
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from FirstPythonPackage import module_a
>>> module_a.do_stuff()
module_b, run_helper completed with options: default_options
module_a, do_stuff completed successfully!
正在Python3虚拟环境中安装我的包(成功):
virtualenv -p python3 env3
source env3/bin/activate
(env3) pip install git+https://github.com/jirikadlec2/first-python-package
运行 我在 Python3 虚拟环境中的包由于导入错误而失败:
(env3) python3
Python 3.5.2 (default, Nov 12 2018, 13:43:14)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from FirstPythonPackage import module_a
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/jiri/github/package_test/env3/lib/python3.5/site-packages /FirstPythonPackage/module_a.py", line 1, in <module>
import module_b
ImportError: No module named 'module_b'
我不明白导入错误的原因。 module_b
似乎已正确安装在包中,声明:from FirstPythonPackage import module_b
没有给我任何错误。我做错了什么以及使我的包中的导入在 Python2 和 Python3 中工作的正确方法是什么?
您可能会遇到
兼容的方式就是
from FirstPythonPackage import module_b
或(例如)
import FirstPythonPackage.module_b as mb
或
import .module_b as mb
即使在您的包裹中 Python 2 和 3。