(在回答'看到这个链接'回答之前,知道我已经搜索了几个小时并且可能已经全部阅读了。我已经完成了尽职调查,我似乎无法找到解决方案)
那就是说,我将从我的一般设置开始,然后给出细节。
设置:在我的桌面上,我有一个项目,我使用虚拟环境在Pycharm,Python3.4中运行。在云(AWS)中。我有一个运行Ubuntu的EC2实例。我没有在云中使用虚拟环境。云计算机安装了python 2.7和python 3.5。
[编辑]我已经在我的云环境中切换到虚拟机,并从设置发布中安装(仍然坏了)
问题:在我的桌面上,无论是在pycharm内还是从命令行(在使用workon(项目)的虚拟环境中),我都可以运行名为“do_daily.py”的特定文件而不会出现任何问题但是,如果我尝试在云服务器上运行相同的文件,我会得到着名的导入错误。 [edit]直接从远程服务器上的命令行运行。
python3 src/do_daily.py
File "src/do_daily.py", line 3, in <module>
from src.db_backup import dev0_backup as dev0bk
ImportError: No module named 'src.db_backup'
文件夹结构:我的特定导入文件夹结构是(以及其他内容)。
+ project
+ src
- __init__.py
- do_daily.py
+ db_backup
- __init__.py
- dev0_backup.py
Python路径:(echo $ PYTHONPATH)
/家庭/ ubuntu的/自动化/项目/ SRC / tg_servers:/家庭/ ubuntu的/自动化/项目/ SRC /在db_backup:/家庭/ ubuntu的/自动化/项目/ SRC / AWS:/家庭/ ubuntu的/自动化/项目/ SRC:/家庭/ ubuntu的/自动化/项目
其他内容:
print(sys.executable) = /usr/bin/python3
print(sys.path) = gives me all the above plus a bunch of default paths.
我已经没有想法了,也会感激任何帮助。
谢谢你, SteveJ
解 显然,接受的答案是最全面的,并且代表了解决问题的最佳方法。但是,对于那些后来看到的人 - 我能够更直接地解决我的具体问题。
(在虚拟环境中),add2virtualenv和创建.pth文件都可以正常工作。我缺少的是我必须添加所有包裹; src,db_backup,pkgx,y,z等......
答案 0 :(得分:1)
我创建了一个github存储库(https://github.com/thebjorn/pyimport.git),并在新创建的AWS / Ubuntu实例上测试了代码。
首先是我做的安装和更新(安装和更新pip3):
ubuntu@:~$ sudo apt-get update
ubuntu@:~$ sudo apt install python3-pip
ubuntu@:~$ pip3 install -U pip
然后获取代码:
ubuntu@:~$ git clone https://github.com/thebjorn/pyimport.git
我的do_daily.py
导入dev0_backup
版本包含一个告诉我们已调用的函数,以及一个__main__
部分(用-m
或文件名调用):< / p>
ubuntu@ip-172-31-29-112:~$ cat pyimport/src/do_daily.py
from __future__ import print_function
from src.db_backup import dev0_backup as dev0bk
def do_daily_fn():
print("do_daily_fn called")
if __name__ == "__main__":
do_daily_fn()
setup.py
文件直接指向do_daily_fn
:
ubuntu@ip-172-31-29-112:~$ cat pyimport/setup.py
from setuptools import setup
setup(
name='pyimport',
version='0.1',
description='pyimport',
url='https://github.com/thebjorn/pyimport.git',
author='thebjorn',
license='MIT',
packages=['src'],
entry_points={
'console_scripts': """
do_daily = src.do_daily:do_daily_fn
"""
},
zip_safe=False
)
以开发模式安装代码:
ubuntu@:~$ pip3 install -e pyimport
我现在可以通过多种方式调用do_daily(注意我没有对PYTHONPATH
做任何事情。)
setup.py中的console_scripts只需输入其名称即可调用do_daily
:
ubuntu@:~$ do_daily
do_daily_fn called
安装软件包(以开发模式或其他方式)使-m
标志开箱即用:
ubuntu@:~$ python3 -m src.do_daily
do_daily_fn called
您甚至可以直接调用该文件(虽然这是迄今为止最丑陋的方式,我建议不要这样做):
ubuntu@:~$ python3 pyimport/src/do_daily.py
do_daily_fn called
答案 1 :(得分:0)
您的PYTHONPATH
应该包含/home/ubuntu/automation/Project
,而可能 。
所有理由都在生产中使用virtualenv,并且永远不会明确地将任何包安装到系统Python中。 System Python用于运行用Python编写的OS提供的软件。不要将其与部署混合使用。
答案 2 :(得分:0)
这里有几个问题。
你从哪个目录运行程序?
您是否尝试导入db_backup
内的src/__init__.py
模块?