Python:安装在远程服务器

时间:2017-04-28 20:34:55

标签: python ubuntu

(在回答'看到这个链接'回答之前,知道我已经搜索了几个小时并且可能已经全部阅读了。我已经完成了尽职调查,我似乎无法找到解决方案)

那就是说,我将从我的一般设置开始,然后给出细节。

设置:在我的桌面上,我有一个项目,我使用虚拟环境在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等......

3 个答案:

答案 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模块?